常見的string類例項化方式有兩種
public class strings
}
第一種方式是直接賦值的型別。先在常量池中給「abc」字串分配空間,然後讓str指向常量池中的「abc」。執行string str2 = 「abc」;前先在常量池中檢查有沒有abc字串,要是有就直接讓str2指向該字串。所以str跟str2指向一樣。對於引用資料型別而言==比較的是位址。第二種方式建立的物件位址均不同,所以str3指向的位址不可能跟str一樣。
再來分析equals(object anobject)這個方法。該函式定義於object。在沒有重寫前該方法就是"=="的作用。string類中把這個方法重寫了:
public boolean equals(object anobject)
if (anobject instanceof string)
return true;}}
return false;
}
這是string類裡的相關原始碼。首先比較指向的位址是否一樣,一樣的話直接判定為true。不一樣就接著判斷。然後用instanceof運算子檢查anobject這個物件是否是string類建立的,也就是檢查傳入的引數是否是字串。當判斷成立就把anobject物件下轉。然後乙個對每個字元的對比了。 關於String類中重寫的equals方法
string anotherstring string anobject 此處為什麼要強制轉換?anobject instanceof string 不是已經判斷了是string型別了麼?轉換成string,是為了之後和string中的逐個字元進行比較。當string.equals string1 ...
String類的equals方法
先上 public boolean equals object anobject if anobject instanceof string return true return false 字串比較方法可以看出從大方向到小方向對比 1.同乙個物件?比引用位址 如果位址都一樣,即乙個物件 直接返回t...
String類equals 原始碼逐行解析
上原始碼 基本型別沒有equals方法,因為equals方法的是object的方法,基本型別沒有繼承這個類。基本型別用 比較的是值。而對於類來說,比較的位址,即是不是在同乙個位址的同一物件。在obect類中,equals方法內部比較用的是 但很多類都重寫了這個方法,使其比較的是內容。來看string...