字符串 trim() 方法



在Java中,我为字符串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");

如果字符串没有空格trim()该方法返回什么?我知道我可以使用equals(),但在考试中我得到了这个问题。

你看过 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 > 0len < value.length 都是假的(对于两端没有空格的字符串来说就是这种情况),它将返回 this

现在,"String" == "String"之所以true,是因为字符串实习。您可以通过谷歌获得有关此的更多信息。

如果 trim() 方法不执行任何操作(因为字符串已被修剪),则返回相同的字符串对象(即 this )。

字符串

实习意味着字符串常量"String"与在整个代码中使用"String"的地方使用的完全相同的对象。

这两个事实加在一起就是为什么==对于"String".trim() == "String"的比较是正确的。

==运算符检查它是否是同一个对象。若要比较对象的相等性,请使用.equals()方法。在第二种情况下,没有空格的字符串不会对对象执行任何操作。因此它是相等的,因为对象是相同的。

最新更新