2014-02-23 105 views
1

String.valueOf()和new String()之間的區別是什麼?你什麼時候使用一個?String.valueOf()和new String()之間的區別

例1:

public String fun(){ 

int foo = 55; 
return String.valueOf(foo); 

} 

例2:

public String fun(){ 

int foo = 55; 
return new String(foo); 

} 

更新:是的,第二個例子並不如其他人下面指出編譯。我沒有意識到這一點,因爲我一直在使用新的String(「something」+ foo),它已經工作,正如fastcodejava指出的那樣。那麼,如果我使用新的String(「something」+ foo)或String.valueOf(foo),那麼兩者是否有區別呢?

+11

第二個示例不編譯。 –

+1

另一種方法是'Integer.toString(foo)' –

+0

誰在乎?他們做同樣的事情,並創建一個String對象來返回。 –

回答

1

第二個代碼甚至不會編譯。但如果你做了return new String("" + foo);,它會的。之後他們幾乎一樣。

+1

我明白了。我一直在使用新的字符串(「東西」+富),它的工作原理,所以你的回答大大澄清了事情。謝謝! – user2441441

+1

這是一個非常糟糕的Java建議 - 它創建了2個不必要的對象 – kares

+0

沒有必要去做新的String(「」+ foo); 「」+ foo本身已經是一個新的String。 – Rudy

1

第一種方法試圖將類型轉換爲字符串並使用該值創建一個新字符串。 第二種方法是一個構造函數,它只是從類似字符串的格式中創建一個新的字符串(而不是整數 - >字符串意義上的類型轉換)。

所以評論是正確的...它不編譯:)

2

第一種方法需要一個整數,並將其轉換爲字符串。 但是,第二種方法只是一個創建String類型的新對象的構造函數。它不能以整數作爲參數。

2

String沒有構造函數,它只接受一個整數。

  • String(byte[] bytes)
  • String(char[] value)
  • String(String original)
  • String(StringBuffer buffer)
  • String(StringBuilder builder)

你應該使用:

Integer.toString(foo); 
2

在示例2,它應該是

return new String(Integer.toString(foo)); 

你一個不編譯。所以不需要考慮它們之間的差異,它們採用不同的參數。

相關問題