Java中 ==和equals 的区别

    我开始接触Java的时候,总是分不清==和equals他们有什么区别,他们比较的是什么。看了圣思园张龙老师的视频学习,跟着他剖析源才慢慢明白。

    我现在理解的 ==和equals:

 

    ==

   比较的是两边的值,不管两边是原生数据类型还是引用数据类型,比较的是他们的值。

   对原生数据类型而言,==比较的是他们所包含的值。

   而对引用类型而言比较的是他们引用的对象的地址是否相同,如果地址相同则两边为同一个对象。

  

   equals

   equals比较的内容不一定,根据每个类对equals的实现而定(不知道这样说对不对,现在是这样认为的,通过两个例子来印证我的想法)。

   equals方法源于object类,他处于所有对象继承体系最顶层,也就是说所有对象都有equals方法。

   object对象对equals方法的实现是(参考原代码):

 

    object底层是用 == 来实现equals方法,也就是说类在没有重写equals方法的前提下,equals方法和==功能相同。

    String的equals方法是我们经常用到的方法,它的equals方法也有不同(参考原代码):

  

     String的equals方法是先用 == 比较两个是否为同一个对象,如果是则返回true,不是还会进一步比较,比较两边的String对象的内容是否相等,如果相等则返回true,否则false。

 

 

     总结: ==比较两边的值,equals比较看调用此方法的对象的实现而定。

 

 


  

posted @ 2012-04-28 10:32  左眼跳跳  阅读(223)  评论(0编辑  收藏  举报