java中的 equals 与 ==

  Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象)

  Java中equals() 在使用必须与类挂上钩,不能单独使用。有的人这样理解"==比较的是对象,而equals()方法比较的是内容(即对象里面的属性)"。

  其实,Java中的equals作为一个方法,我们不能脱离了类来单独讨论它:

  equals()方法是来自于Object类的,源码如下:

1 public boolean equals(Object obj)
2 {
3     return this == obj;
4 }  

  Object类中的equals方法与==功能是一模一样的:比较两个对象是否是同一个对象。

  只是,作为Object子类的String类为了符合自身的特质,重写了Object类的equals方法,重写后的效果是:如果两个String对象的值相同,那么调用equals方法返回true,否则返回false。

  看如下演示代码:

 1 public class Test{
 2    
 3      public static void main(String[] args){
 4          String str1 = "hello";
 5          String str2 = new String("hello");
 6          String str3 = new String("hello");
 7          String str4 = str3;//与str3是同一个对象
 8 
 9          System.out.println(str1 == str2);//false,不是同一个对象
10         System.out.println(str2 == str3);//false,不是同一个对象
11         System.out.println(str3 == str4);//true,是同一个对象
12         System.out.println(str1.equals(str2));//true,值(属性)相同
13         System.out.println(str2.equals(str3));//true,值(属性)相同 
14        
15         A a1 = new A();
16         A a2 = new A();
17         System.out.println(a1 == a2);//false,不是同一个对象
18         System.out.println(a1.equals(a2));//false 因为没有重写equals()方法,所以直接调用Object的equals方法(等同于==),所以错误(因为不是同一对象)
19     }
20 }
21 
22 class A{}

  Java中,所有基本数据类型的实现类都按照String类的方式重写了equals方法,这些类都符合”==比较对象,equals比较值“这一结论。

  如果一个类是你自己定义的,那么如果你不重写equals方法,它还是默认比较对象。(直接调用Object类中的方法)

  参考链接:http://jingyan.baidu.com/article/f96699bbc9d6ae894e3c1b81.html

原文地址:https://www.cnblogs.com/aikaiqiang/p/5787149.html