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方法,而不要使用 '=='.

你可能感兴趣的:(java)