zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    nefu 628 Garden visiting
    codeforces 814 C. An impassioned circulation of affection 【尺取法 or DP】
    bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)
    Codeforces Round #423 (Div. 2)
    hdu 5955 Guessing the Dice Roll 【AC自动机+高斯消元】
    poj1322 Chocolate 【 概率DP 】
    poj 3414 Pots 【BFS+记录路径 】
    hdu5194 DZY Loves Balls 【概率论 or 搜索】
    51nod 1515 明辨是非 [并查集+set]
    hdu 1175 连连看 [DFS]
  • 原文地址:https://www.cnblogs.com/aikaiqiang/p/5787149.html
Copyright © 2011-2022 走看看