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;
}
添加回答
举报