天天看点

JAVA中 == 和 equals() 的区别

1、首先需要了解下基本类型和引用类型。

       从概念来说:

           基本数据类型:变量名指向具体的值。

           引用数据类型:变量名指向存存储数据对象的内存地址,即变量指向的是hash值。

       从内存构建上:

           基本数据类型:变量在声明之后jvm会立刻分配给他内存空间。

           引用数据类型:以特殊的方式(类似于指针)指向对象实体,这类变量声明时不会分配内存,只是存储了一个内存地址。

        基本的数据类型:8种。byte,short,char,int,long,float,double,boolean.

        引用数据类型:类,String, 接口,数组等

  2、== 和 equals 的区别

       基本类型之间的比较,应该使用 == ,比较的是他们之间的值。

       引用类型 使用 == 号时比较的是内存中的地址,(堆内存中的地址)。只有同一个new出来的对象,比较时才相等。每new一次都会开辟新的堆内存空间。

      equals() 方法默认是比较对象的内存地址,但在一些类库中这个方法被重写了,如String、Integer、Data,不在比较内存地址了。 对于复合数据类型之间进行equals()比较,默认情况下比较内存地址和 == 号相同。如果被重写,则按照重写的要求进行比较。

总结:

 == :

  基本类型:比较值是否相等

  引用类型:比较的就是内存地址是否相同

equals :

  引用类型:默认情况下,比较的是地址值。可以进行重写,使其比较对象的值是否相等。