String trim()方法

时间:2014-01-11 13:12:05

标签: java string trim

在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()我可以使用但是在我的考试中我得到了这个问题。

3 个答案:

答案 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 > 0len < value.length都是假的,那么对于两端都没有空格的字符串就是这种情况,它会返回this

现在,为什么"String" == "String"true是由于字符串实习。您可以通过谷歌获取更多相关信息。

答案 1 :(得分:3)

如果trim()方法什么都不做(因为字符串已被修剪),则返回相同的字符串对象(即this)。

String interning表示字符串常量“String”与使用“String”的代码中使用的完全相同的对象。

这两个事实是=="String".trim() == "String"进行比较的原因。

答案 2 :(得分:0)

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