微信公众号 |  新浪微博 | 5分享社区

5分享

类别:
当前位置: 主页 > 技术圈 > 程序开发 >

java语言中==和equals的区别

时间:2018-10-14 14:06来源:原创 作者:5分享 点击:
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。 equals用来比较的是两个对象的

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。


java中的数据类型,可分为两类: 

1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 

  他们之间的比较,应用双等号(==),比较的是他们的值。 

2.复合数据类型(类) 

  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。



对equals需要注意五点:


  1   自反性:对任意引用值X,x.equals(x)的返回值一定为true;

  2   对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;

  3   传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true ;

  4   一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变;

  5   非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 。


欢迎关注【5分享】(fivsha)公众号获取更多帮助和资讯。   

5分享公众号.jpg

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
网名:
验证码:点击我更换图片
最新评论