級聯我用Java代碼優化我的工作。我不清楚String.valueOf
或+""
標誌的區別:字符串的valueOf VS空字符串
int intVar = 1;
String strVar = intVar + "";
String strVar = String.valueOf(intVar);
是什麼線2和3之間的區別?
級聯我用Java代碼優化我的工作。我不清楚String.valueOf
或+""
標誌的區別:字符串的valueOf VS空字符串
int intVar = 1;
String strVar = intVar + "";
String strVar = String.valueOf(intVar);
是什麼線2和3之間的區別?
public void foo(){
int intVar = 5;
String strVar = intVar+"";
}
這種方法使用StringBuilder的創建結果字符串
public void foo();
Code:
0: iconst_5
1: istore_1
2: new #2; //class java/lang/StringBuilder
5: dup
6: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
9: iload_1
10: invokevirtual #4; //Method java/lang/StringBuilder.append:(I)Ljava/lan
g/StringBuilder;
13: ldc #5; //String
15: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
18: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/la
ng/String;
21: astore_2
22: return
public void bar(){
int intVar = 5;
String strVar = String.valueOf(intVar);
}
這種方法調用的String
只是一個靜態方法來獲得INT
public void bar();
Code:
0: iconst_5
1: istore_1
2: iload_1
3: invokestatic #8; //Method java/lang/String.valueOf:(I)Ljava/lang/Stri
ng;
6: astore_2
7: return
String版本
,接着調用Integer.toString()
我寧願valueOf()
,因爲我認爲這是更具可讀性和明確的。
對性能有任何疑慮是微優化,而這無法衡量。我不會擔心他們,直到我可以進行測量,並看到他們有所作爲。
第一行是相當於
String strVal = String.valueOf(intVar) + "";
,以便有一些額外的(和毫無意義的)工作要做。不確定編譯器是否優化了與空字符串文字的連接。如果沒有(和看着@ Jigar的回答它顯然並非如此),這將反過來成爲
String strVal = new StringBuilder().append(String.valueOf(intVar))
.append("").toString();
那麼你真的應該直接使用將String.valueOf。
問自己代碼的目的。它是:
它更像後者的聲音,我...這就是爲什麼我會使用String.valueOf
。無論何時你可以用你描述你想要實現的相同方式來閱讀你的代碼,這是一件好事。
請注意,這適用於所有類型和傳遞空引用,而不是拋出NullPointerException
將返回「零」。如果您使用的是類(而不是int
如本例),你想它,如果它是空拋出一個異常(例如因爲這代表了一個bug),請參考toString
代替。
'String.valueOf(int x)'*僅調用String的靜態方法來獲取int *的String版本。當我們談論Android時,建議*避免*使用靜態方法。您如何看待Android中的這種方法? – Machado
連接字符串和其他變量的實際使用String.valueOf()
(和StringBuilder
)之下,因此編譯器將有望丟棄空字符串,並且產生在兩種情況下相同的字節碼。
看@ @ Jigar的答案顯然不會做這種優化 – Thilo
@Thilo:雖然有多個Java編譯器。 –
從優化的角度來看,我會一直喜歡兩者之間的String.valueOf()
。第一種是隻是一個黑客,試圖欺騙intVar
轉換成一個String
,因爲+運算符。
String strVar1 = intVar+"";
String strVar2 = String.valueOf(intVar);
strVar1等同放着清單strVar2,但使用INT + emptyString 「」 不優雅的方式來做到這一點。
使用valueOf更有效。
使用String.valueOf(int)
或更好,Integer.toString(int)
是相對更有效的機器。但是,除非性能很關鍵(在這種情況下,我不建議你使用)然後""+ x
更有效地利用你的時間。恕我直言,這通常更重要。有時候更重要。
換句話說,""+
浪費了一個對象,但Integer.toString()
創建了幾個。無論你的時間更重要還是想避免不惜一切代價創建對象。你不太可能會創建多個對象是好的,但創建一個對象不是。
好的短語:「那麼」「+ x更有效地利用你的時間,恕我直言,這通常更重要。」 – teddy
可能重複[Is conversion to String using(「」+)bad practice?](http://stackoverflow.com/questions/1572708/is-conversion-to-string-using-int-value-bad -practice) –
Necreaux