java学习——equals()和==的比较

 2023-09-05 阅读 32 评论 0

摘要:equals 方法是 java.lang.Object 类的方法。 下面从两个方面来说明equals()和==的差别:(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。    “==”比较两个变量本身的值&#

equals 方法是 java.lang.Object 类的方法。


下面从两个方面来说明equals()和==的差别:
(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
    “==”比较两个变量本身的值,即两个对象在内存中的首地址
    “equals()”比较字符串中所包含的内容是否相同


  【例子】    

String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");s1==s2; //false,两个变量的内存地址不一样,也就是说它们指向的对象不 一样
s1.equals(s2);  //  true,两个变量所包含的内容是abc,故相等。
s1 == s3;  //false
s1.equals(s3); //true
s3 == s4; //true,字符串常量所生成的变量,存放于常量池中,故其中所存放的内存地址是相等的
s3.equals(s4);  //true

  【注意】

    在字符串构建中有个特殊字符串类型StringBuffer,StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
Object类中的equals方法是用来比较“地址”的。所以会有如下情形出现:

StringBuffer s1 = new StringBuffer("a");StringBuffer s2 = new StringBuffer("a");s1.equals(s2) //false

(2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

A obj1 = new A();
A obj2 = new A();
obj1==obj2; //false
obj1.equals(obj2); //false

A obj1 = new A();
obj2 = obj1;
obj1==obj2; //true
obj1.equals(obj2); //true

【总结】:

  1. equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。

    == 比较符是比较指向的对象是否相同的,也就是对象在对内存中的的首地址。

  2. equals 方法是 java.lang.Object 类的方法,Object类中的equals方法是用来比较“地址”的,但是String类中重新定义了equals这个方法,而且比较的是值,而不是地址。

  3. 如果是基本类型(byte, short, int, long, float, double, char,boolean)比较,那么只能用==来比较,不能用equals();

  4. 对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。

  5. 注意一个基本的原则:在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法

 

重写equals()方法的一般规则:

a、先用“==”判断是否相等(是否指向同一对象)。
 
b、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。
 
c、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。
 
d、判断类的成员是否对应相等。往下就随意发挥了。

【例子】判断被比较对象user的username 属性和待比较对象的username相等:

 

    public class User {    private String username;  @Override  public boolean equals(Object obj){  if(obj == null){  return false;  }else {           if(this.getClass() == obj.getClass()){  User u = (User) obj;  if(this.getUsername().equals(u.getUsername())){  return true;  }else{  return false;  }                 }else{  return false;  }  }             }  }  

 

转载于:https://www.cnblogs.com/CherishFX/p/4607084.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/1444.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息