在Java中,我在下面编写了string trim()方法的代码。
if(" String ".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
它提供了我理解的输出Not Equal
,因为" String ".trim()
已返回新的String
对象引用。
但是当我修剪并比较没有空格时,它会输出Equals
。
if("String".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
如果String没有空格,trim()
方法返回什么?
我知道equals()
我可以使用但是在我的考试中我得到了这个问题。
答案 0 :(得分:5)
您是否看过API? trim()
方法的文档中明确说明了这一点:
返回:此字符串的副本,包含前导和尾随空格 删除,或此字符串,如果它没有前导或尾随空格。
您也可以浏览源代码。如果两端都没有删除空格,trim()
方法会返回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 > 0
和len < value.length
都是假的,那么对于两端都没有空格的字符串就是这种情况,它会返回this
。
现在,为什么"String" == "String"
是true
是由于字符串实习。您可以通过谷歌获取更多相关信息。
答案 1 :(得分:3)
如果trim()
方法什么都不做(因为字符串已被修剪),则返回相同的字符串对象(即this
)。
String interning表示字符串常量“String”与使用“String”的代码中使用的完全相同的对象。
这两个事实是==
对"String".trim() == "String"
进行比较的原因。
答案 2 :(得分:0)
==
运算符检查它是否是同一个对象。
要比较对象的相等性,请使用.equals()
方法。
在第二种情况下,没有空格的String将不会对Object执行任何操作。因此它是相同的,因为对象是相同的。