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的区别

java equals用法

跟王老师学集合Java中hashCode方法与equals方法的用法

java中equals以及==的用法(简单介绍)

java中equals如何表示不相等