java中equals与==的用法比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中equals与==的用法比较相关的知识,希望对你有一定的参考价值。
1.equals用法
个人的归纳总结:
- 用于String类型之间的比较时,调用的是String类的equals()方法,比较的是字符串的内容而不是地址,并且只能用于比较String类型,因为StringBuffer和StringBuilder类中都没有equals()方法。
- 用于其他类型之间(包括含有一个Sting类型的情况)的比较时,以o1.equals(o2)为例: 若o1是String类型,则调用的时String类的equals方法,返回值为false;若o1不是String类型,则调用的是Object类的equals()方法(此时与==用法相同),比较的是引用变量的地址而不是内容。
1 private static void equalsAnal() { 2 String s1 = "hello"; 3 String s2 = "hello"; 4 String s3 = new String("hello"); 5 String s4 = new String("hello"); 6 String s5 = new String(new StringBuffer("hello")); 7 8 StringBuffer s6 = new StringBuffer("hello"); 9 StringBuffer s7 = new StringBuffer("hello"); 10 11 System.out.println(s1.equals(s2));//true 12 System.out.println(s3.equals(s4));//true 13 14 System.out.println(s1.equals(s3));//true 15 16 System.out.println(s1.equals(s5));//true 17 System.out.println(s3.equals(s5));//true 18 19 System.out.println(s6.equals(s7));//false 20 System.out.println(s1.equals(s6));//false 21 System.out.println(s3.equals(s6));//false 22 System.out.println(s5.equals(s6));//false 23 System.out.println(s6.equals(s1));//false 24 }
对于上述代码的结果,我们可以结合String类以及Object类的源码来进行分析:
1 //String类中的equals方法 2 public boolean equals(Object anObject) { 3 if (this == anObject) { 4 return true; 5 } 6 if (anObject instanceof String) { 7 String anotherString = (String)anObject; 8 int n = value.length; 9 if (n == anotherString.value.length) { 10 char v1[] = value; 11 char v2[] = anotherString.value; 12 int i = 0; 13 while (n-- != 0) { 14 if (v1[i] != v2[i]) 15 return false; 16 i++; 17 } 18 return true; 19 } 20 } 21 return false; 22 }
1 //Object类中的equals方法 2 public boolean equals(Object obj) { 3 return (this == obj); 4 }
2. ==用法
==是一种关系运算符,用于基本数据类型时,比较的是两个变量的值是否相等;用于引用类型时,比较的是两个引用变量的地址是否相同。
1 int a = 10, b = 10; 2 char ch1 = ‘A‘, ch2 = ‘A‘; 3 String str1 = "hello"; 4 String str2 = "hello"; 5 Integer n1 = new Integer(10); 6 Integer n2 = new Integer(10); 7 8 System.out.println(a == b);//true 9 System.out.println(ch1 == ch2);//true 10 System.out.println(str1 == str2);//true 11 System.out.println(n1 == n2);//false
3.用法比较
1 String s1 = "hello"; 2 String s2 = "hello"; 3 String s3 = new String("hello"); 4 String s4 = new String("hello"); 5 String s5 = new String(new StringBuffer("hello")); 6 7 StringBuffer s6 = new StringBuffer("hello"); 8 StringBuffer s7 = new StringBuffer("hello"); 9 10 System.out.println(s1.equals(s2));//true 11 System.out.println(s1==(s2));//true 12 13 System.out.println(s3.equals(s4));//true 14 System.out.println(s3==(s4));//false 15 16 System.out.println(s1.equals(s3));//true 17 System.out.println(s1==(s3));//false 18 19 System.out.println(s1.equals(s5));//true 20 System.out.println(s1==(s5));//false 21 22 System.out.println(s3.equals(s5));//true 23 System.out.println(s3==(s5));//false 24 25 System.out.println(s6.equals(s7));//false 26 System.out.println(s1.equals(s6));//false 27 System.out.println(s3.equals(s6));//false 28 System.out.println(s5.equals(s6));//false 29 System.out.println(s6.equals(s1));//false
综上所述,equals和==用法相同的情况:
- 字符串为基本数据类型String的变量;
- 比较的是两个非String类型的引用变量。
以上是关于java中equals与==的用法比较的主要内容,如果未能解决你的问题,请参考以下文章
java中equals和equalsignorecase的区别
java中equals和equalsignorecase的区别