设为首页 加入收藏

TOP

java中equals与==的用法比较
2017-10-11 15:19:50 】 浏览:6051
Tags: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方法,这其实是重写了Object类中的equals方法,因为String类继承自Object类  
 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

 综上所述,equals和==用法相同的情况:

  • 字符串为基本数据类型String的变量;
  • 比较的是两个非String类型的引用变量。

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java集合类源码分析之Map(二) 下一篇作业 刘惠惠

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目