1.compareTo:
附上:源码:
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
从源码中可以看出了:
compareTo的主要是比较两个String对象间的字符的Unicode值并作差(若是子集包含的关系则是比较长度差值)
2.equals:
附上(String类中)源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
从源码中可以看出了:
equals是被重写了:变为了比较字符的内容(object中的equals作用与==一样,有兴趣的可以自己去看object中equals的源码)
3.==
这个就是直接比较对象的引用地址:
若一样则返回true
反之false
最后国际惯例附上练习代码君:
package com.jacob.javase;
/*
* 比较compareTo与equals及==的区别
*/
public class EqualsAndCompAreTo {
public static void main(String[] args) {
// 1.compareTo()
// String中:比较的是Unicode值
String ct = "xieji";
String ct1 = "xieji";
String ct2 = "xadfi";
String ct3 = "xasdfds";
String ct4 = "xieji123";
// ct.compareTo(ct4);
System.out.println("ctComct1=" + ct.compareTo(ct1) + " " + "ctComct2="
+ ct.compareTo(ct2) + " " + "ctComct3=" + ct3.compareTo(ct)
+ " " + "ctComct4=" + ct.compareTo(ct4));
// 2. equals与==:一个比较内容,一个比较地址@
String a = "test";
String a1 = "test";
String a2 = new String("test");
Boolean d = a.equals(a1);
Boolean d1 = a.equals(a2);
boolean e = a == a1;
boolean f = a == a2;
System.out.println(d + " " + e + " " + f + " " + d1);
}
}