2014-01-11 104 views
-4

在Java中我寫下了字符串trim()方法的代碼。String trim()方法

  if(" String ".trim() == "String") 
       System.out.println("Equal"); 
      else 
       System.out.println("Not Equal"); 

它使輸出Not Equal S的我明白,因爲" String ".trim()已經回到新String對象引用。

但是,當我修剪和比較沒有空白時它給出輸出Equals

  if("String".trim() == "String") 
       System.out.println("Equal"); 
      else 
       System.out.println("Not Equal"); 

如果字符串沒有空格什麼trim()方法返回? 我知道equals()我可以使用,但在我的考試中,我得到了這個問題。

+1

這是Java字符串池的結果。請參閱http://stackoverflow.com/questions/3801343/what-is-string-pool-in-java –

+0

如果沒有空格,則trim()方法返回此內容 – Sumeet

回答

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是憑藉String實習。您可以通過谷歌獲得更多關於此的信息。

+0

或者,API(http://docs.oracle.com/zh_cn/ .com/javase/7/docs/api/index.html)已經聲明:「返回字符串的副本,省略前導和尾隨空白。」所以如果沒有可以忽略的空白,那麼什麼都不會改變。 – SirRichie

+0

@SirRichie然而API並沒有說明是否創建了新副本,或者沒有在末尾沒有空白。 –

+0

沒錯,你是對的。 – SirRichie

3

如果trim()方法什麼都不做(因爲字符串已經被修剪),則返回相同的字符串對象(即this)。

String interning意味着字符串常量「String」是在使用「String」的任何地方使用的完全相同的對象。

這兩個事實一起是爲什麼==對於"String".trim() == "String"的比較是正確的。

0

==運算符檢查它是否是同一個對象。 要比較對象的相等性,請使用.equals()方法。 在你的第二種情況下,沒有空格的字符串不會對對象做任何事情。因此它是相等的,因爲對象是相同的。

+0

呃。爲什麼-1?! – Hrishikesh