3 回答

TA貢獻1831條經驗 獲得超10個贊
你是對的。如果trim()方法不改變值,那么將返回原始實例。如果所有“Hello”都更改為“Hello”,則 s3 將不等于 s1,因為 trim() 會刪除空格并返回一個新的字符串實例。

TA貢獻1796條經驗 獲得超4個贊
如果您查看該trim()方法的源代碼,這是正確的,您會看到在刪除空格后substring(start, end)調用了該方法。否則,如果沒有空格,則this返回相同的實例。
public String trim() {
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
這st是刪除空格后的起始索引,len是新的長度。
現在,如果字符串之前或之后有任何空格:
String s1 = "hello "; //<-- whietspace at the end
System.out.println(s1.trim() == "hello");
輸出與方法調用時的輸出false相同。如果和不相同,則子字符串返回一個新的 String 實例:substring()trim()beginIndexendIndex
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
因此,在刪除空格(如果有)之后, 和beginIndex顯然endIndex會發生變化,并且new String()將返回一個實例。

TA貢獻1802條經驗 獲得超5個贊
這是 trim() 的源代碼。如果沒有要刪除的空格,則返回this. 所以它與您trim編輯的參考文獻相同。
public String trim() {
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
添加回答
舉報