java equals()方法
java中==与equals()的区别
==: 基本数据比较的是值的大小(值相同则返回true),
引用变量比较的是引用的地址(两个引用变量指向同一个对象时则返回true)。
equals()方法的本意是要比较对象是否相同
1 public class Equals { 2 public static void main(String[] args) { 3 Score s1 = new Score(10); 4 Score s2 = new Score(10); 5 if (s1.equals(s2)) { 6 System.out.println("等しい"); 7 } else { 8 System.out.println("等しくない"); 9 } 10 11 if (s1.hashCode() == s2.hashCode()) { 12 System.out.println("等しい"); 13 } else { 14 System.out.println("等しくない"); 15 } 16 17 if (s1.toString() == s2.toString()) { 18 System.out.println("等しい"); 19 } else { 20 System.out.println("等しくない"); 21 } 22 23 if ((s1.toString()).equals(s2.toString())) { 24 System.out.println("等しい"); 25 } else { 26 System.out.println("等しくない"); 27 } 28 29 System.out.println(s1); 30 System.out.println(s1.toString()); 31 System.out.println(s2); 32 System.out.println(s2.toString()); 33 } 34 }
实行结果为
等しくない
等しくない
等しくない
等しくない
興味.Score@b98fe1
興味.Score@b98fe1
興味.Score@952527
興味.Score@952527
由此可以看出,比较的其实是引用,既要确认两个对象的引用是否相同。、
s1,s2返回的是内存所对应的哈西值。
==不允许我们进行重写
equals()方法可以进行重写,可以达到比较对象的值的大小而不比较引用。
例如String.equal()
1 public class StringEqual { 2 3 public static void main(String[] args) { 4 String a=new String("AAA"); 5 String b="AAA"; 6 if(a==b){ 7 System.out.println("true"); 8 }else{ 9 System.out.println("false"); 10 } 11 if(a.equals(b)){ 12 System.out.println("true"); 13 }else{ 14 System.out.println("false"); 15 } 16 17 } 18 19 }
返回是
false
true