java '相等'的比较.

  我们知道对于操作符 "==",如果比较的是原生类型(primitive type),表示的是 '值本身'是否相等;而对于引用类型(reference type),表示的是 '对象的地址'是否相等.

  java中Object 类的源代码为(表示'对象地址'是否相等):

1 public boolean equals(Object obj) {
2     return (this == obj);
3     }

  java中String类的源代码为(表示的是'字符串内容'是否相等):

 1 public boolean equals(Object anObject) {
 2     if (this == anObject) {
 3         return true;
 4     }
 5     if (anObject instanceof String) {
 6         String anotherString = (String)anObject;
 7         int n = count;
 8         if (n == anotherString.count) {
 9         char v1[] = value;
10         char v2[] = anotherString.value;
11         int i = offset;
12         int j = anotherString.offset;
13         while (n-- != 0) {
14             if (v1[i++] != v2[j++])
15             return false;
16         }
17         return true;
18         }
19     }
20     return false;
21     }

假设使用'=='来操作String(其实是不合理的,但是很多人都是这样用,包括我在内):

 1 class StringDemo {
 2     public static void main(String[] args) {
 3         String s = "a";
 4         String s2 = "a";
 5         System.out.println(s == s2);    //output 'true'.
 6 
 7         String s3 = new String("b");
 8         String s4 = new String("b");
 9         System.out.println(s3 == s4);    //output 'false'.
10 
11         String s5 = "c";
12         String s6 = new String("c");
13         System.out.println(s5 == s6);    //output 'false'.
14 
15     }
16 }

  equals 的使用总结:

  Object 中的 equals 方法表示的是对象的地址是否相等;

  String 继承了Object类,但是String类重写了equals 方法,比较的是'内容本身'.

  可以说是百分之百,我们对于String的比较,比较的是内容本身是否相等,而不会是比较字符串对象是否相等,所以对于String类型的比较,请使用equals方法,而不要使用 '=='.

posted @ 2014-01-20 02:30  wonkju  阅读(391)  评论(0编辑  收藏  举报