Java == equals比较

原创 Laughing  2017-11-05 17:16  阅读 45 次 评论 0 条

似乎每个语言都无法逃脱 ==equal的区别。对于字符串类型,JVM常量池会保证相同的字符串只有一个,不会产生多个副本。==常用语值类型的判断,但是通过new String()创建的字符串对象是运行时创建出来的,会保存在堆内存中。equals()用于比较连个对象的引用是否相同。

  1. String s1 = "木子网";  
  2. String s2 = "www.lisen.me";  
  3. String s3 = "木子网www.lisen.me";  
  4. String s4 = s1+s2;  
  5. String s5 = new String("木子网www.lisen.me");  
  6. String s6 = "木子网"+"www.lisen.me";  
  7. System.out.println(s3==s4);//false  
  8. System.out.println(s3.equals(s4));//true  
  9. System.out.println(s3==s5);//false  
  10. System.out.println(s3.equals(s5));//true  
  11. System.out.println(s3==s6);//true  
  12. System.out.println(s3.equals(s6));//true  
String类重写了equals()方法,用于比较字符串的字符以及顺序是相同的。

重写equals()方法

我们可以通过重写equals()方法来比较两个对象是否相等。

定义Person类
  1. public class Person {  
  2.     // TODO Auto-generated constructor stub  
  3.     public String name;  
  4.     public String idStr;  
  5.   
  6.     public Person(String name,String idStr){  
  7.         this.name=name;  
  8.         this.idStr=idStr;  
  9.     }  
  10.       
  11.     public boolean equals(Object obj) {  
  12.         if (this == obj) {  
  13.             return true;  
  14.         }  
  15.         if (obj != null && obj.getClass() == Person.class) {  
  16.             Person perObj = (Person) obj;  
  17.             if (this.idStr == perObj.idStr) {  
  18.                 return true;  
  19.             }  
  20.             return false;  
  21.         }  
  22.         return false;  
  23.     }  
  24. }  
运行比较
  1. Person person1 = new Person("李森""济南");  
  2. Person person2 = new Person("李森1""济南");  
  3. System.out.println(person1.equals(person2));//true  

本文地址:https://www.lisen.me/java-equals.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情