用==判斷String是否相等

Java中的String str="abc"; String str=new String("abc");和String str = new String();的區別以及==與equals()的不同。
Java運行環境有一個字符串池,由String類維護。執行語句String str="abc"時,首先查看字符串池中是否存在字符串"abc",如果存在則直接將"abc"賦給str,如果不存在則先在字符串池中新建一個字符串"abc",然後再將其賦給str。執行語句String str=new String("abc")時,不管字符串池中是否存在字符串"abc",直接新建一個字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然後將其付給str。前一語句的效率高,後一語句的效率低,因爲新建字符串佔用內存空間。String str = new String()創建了一個空字符串,與String str=new String("")相同。下面舉個例子說明:
public class CompareString {
public static void main(String[] args) {
String a = new String();
String aa = "";
String aaa = new String("");
String b = new String("asdf");
String c = new String("asdf");
String d = "asdf";

System.out.println(a == aa); //false
System.out.println(a == aaa); //false
System.out.println(a.intern() == aa.intern()); //true
System.out.println(a.intern() == aaa.intern()); //true
System.out.println(d == "asdf"); //true
System.out.println(b == c); //false
System.out.println(b == d); //false
System.out.println(b.equals(c)); //true
System.out.println(b.equals(d)); //true

b = b.intern();
System.out.println(b == c); //false
System.out.println(b == d); //true
c = c.intern();
System.out.println(b == c); //true
}

}

從運行結果可以驗證前面所述的內容。如果不懂String 類的intern()方法的用法可以參考jdk自帶的文檔.
從CompareString類中我們也可以看出==與equals()的不同之處:即==比較的是兩個對象的引用(即內存地址)是否相等,而equals()比較的是兩個對象裏的內容(即內存地址裏存放的東西)是否相等。當然equals()在個別類中被重寫了那就例外了。

instance of是判斷一個object是不是屬於某個類的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章