[英]Difference between String.valueOf() and 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);
}
更新:是的,第二個示例無法編譯,正如下面其他人指出的那樣。 我沒有意識到這一點,因為我一直在使用 new String("something" + foo) 並且它已經工作了,正如 fastcodejava 所指出的那樣。 那么如果我使用 new String("something" + foo) 或 String.valueOf(foo) ,兩者之間有區別嗎?
第一種方法接受一個整數並將其轉換為字符串。 然而,第二種方法只是一個構造函數,它創建了一個 String 類型的新對象。 它不能將整數作為參數。
String
沒有采用單個整數的構造函數。
String(byte[] bytes)
String(char[] value)
String(String original)
String(StringBuffer buffer)
String(StringBuilder builder)
你應該使用:
Integer.toString(foo);
在示例 2 中,它應該是
return new String(Integer.toString(foo));
你的沒有編譯。 所以沒有必要考慮它們之間的區別,它們采用不同的參數。
第一種方法嘗試將類型轉換為 String 並使用該值創建一個新字符串。 第二種方法是構造函數,它只是從類似字符串的格式中創建一個新字符串(不是整數 -> 字符串意義上的類型轉換)。
所以評論是正確的......它沒有編譯:)
第二個代碼甚至無法編譯。 但是如果你確實return new String("" + foo);
, 它會。 之后它們幾乎相同。
除了其他人給出的點之外,我看不到 String.valueOf() 和 new String() 之間的任何區別,因為我看到兩者都在創建一個新的 String 對象。 我嘗試使用 -
char[] chars = {'c','a','t'};
System.out.println(String.valueOf(chars) == String.valueOf(chars));
System.out.println(new String(chars) == new String(chars));
兩者都給出錯誤的說明,它們都是不同的 String 對象。
所以我沒有看到任何性能或內存消耗差異。
奇怪的是,以下代碼片段產生了不同的結果。 在處理 Base64 編碼的字節 [] 時看起來有些不同
不正確:
byte[] bytesArray = new byte[(int) a_imageFile.length()];
FileInputStream fis= new FileInputStream(a_imageFile);
fis.read(bytesArray);
byte[] encoded = Base64.getEncoder().encode(bytesArray);
result = "data:image/jpg;base64,"+ String.valueOf(encoded);
正確的:
...
result = "data:image/jpg;base64,"+ new String(encoded);
另一個不同的例子:
在讀取文件並使用 readAllBytes() 時,使用 new String() 可以打印該文件的內容。
String template = new String(fileName.readAllBytes());
Log.info("File content: " + template;
//文件的內容被記錄為'你好,這是我的txt文件的內容'
但是,當使用 String.valueOf 時,您將獲得地址位置。
String template = String.valueOf(fileName.readAllBytes());
Log.info("File address: " + template;
//記錄一個地址位置,而不是像'A@24gj49bj'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.