我们先来看下方法:
boolean equals(Object anObject) 将此字符串与指定的对象比较。 int compareTo(Object o) 把这个字符串和另一个对象比较。
== 和 equals的区别:
==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int b= 10; a==b,返回为 true。
而对于下面情况:
String a=new String("abc");
String b=new String("abc");
a==b; 返回的则是一个false。这是因为,对于对象的比较是对对象引用的比较,对于a和b ,他们在内存中对应的地址是不一样的,所以 a==b 返回的值是一个false.
==操作符并不涉及对象内容的比较。若要对对象内容进行比较,则用equals. 如果 在本例中,a.equals(b)则返回是一个true值。
总而言之,==是对对象地址的比较,而equals是对对象内容的比较。对于基本数据类型,一般用==,而对于字符串的比较,一般用equals
compareTo():
java.lang包下面的基本数据类型的封装类都提供了该方法,如 Integer,Float,Byte,Short,Character 等
在String 中,则是按照字典顺序进行比较,返回的值是一个int 型。
返回0,含义为相等。
一段示例代码:
public class HelloJavaString{ public static void main(String args[]){ String str1=new String("abc"); String str2=new String("abc"); //输出==比较 System.out.println((str1==str2)? "true":"false");//false //输出equals比较 System.out.println((str1.equals(str2))? "true":"false");//true //输出compareTo比较 if(str1.compareTo(str2)==0){ System.out.println("str1 is equal str2");}//str1 is equals str2 //输出赋值后的==比较 str1=str2; System.out.println((str1==str2)? "true":"false");//true } }
str2对象赋值给str1之后,str2和str1的引用其实是指向了内存中的同一个位置。所以,再进行==比较时,结果就是true.