==和equals的区别

  • Post author:
  • Post category:其他


“==”和equals 最大的区别是
  • “==”是运算符,如果是基本数据类型,则比较

    存储的值

    ;如果是引用数据类型,则比较

    所指向对象的地址值

  • equals是Object的方法,比较的是

    所指向的对象的地址值

    ,一般情况下,重写之后比较的是

    对象的值


一、==


基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址


(确切的说,是

堆内存

地址)

注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。


通俗理解:

其实==比较的不管是基本数据类型,还是引用数据类型的变量,比较的都是值,只是引用类型变量存的值是对象的地址


二、equals()

equals是Object的方法,用来比较两个

对象的地址值

是否相等。

注意:

equals 方法不能用于比较基本数据类型,如果没有对 equals 方法进行重写,则相当于“==”,比较的是引用类型的变量所指向的对象的地址值。

一般情况下,类会重写equals方法用来比较两个对象的内容是否相等。比如String类中的equals()是被重写了,比较的是对象的值。


运行速度不同

1、equals():没有==运行速度快。

2、==:运行速度比equals()快,因为==只是比较引用

public class Test {
    public static void main(String[] args) {
        //基本数据类型的比较
        int a=10;
        int b=10;
        System.out.println(a==b);  //true

        //引用数据类型的比较
        //String类(重写了equals方法) 中==与equals的比较

        String a1="hello";
        String a2="hello";
        System.out.println(a1==a2); //true 比较的是地址值 :内容相同 常量池中有内容"hello",对象其实是同一个对象, 地址值相同
        System.out.println(a1.equals(a2));//true

        System.out.println("========================");

        String st1= new String("tyu");
        String st2= new String("tyu");
        System.out.println(st1==st2);//false  比较地址值:在堆内存中的地址值不同
        
    }
}

其实st1与st2相等的原因是用到了内存中的常量池,当运行到st1创建对象时,如果常量池中没有,就在常量池中创建一个对象”tyu”,第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相等。



版权声明:本文为Hrgge原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。