假設我用 Java 寫了這樣的東西:
String a = args[0]; // user input from keyboard
String b = a "foo1";
String c = "foo2" "foo3";
是否會在字串池中創建“foo1”、“foo2”、“foo3”?
uj5u.com熱心網友回復:
字串"foo1"和"foo2foo3"是編譯時常量運算式的值,兩者都將被實習。
其他字串都不會。
a沒有被實習。a "foo1"沒有被實習。既沒有也沒有
"foo2"被"foo3"拘留。事實上,甚至沒有為這兩個文字創建運行時String物件。運算式在"foo2" "foo3"編譯時進行評估。
字串不可變這一事實并不能預測字串值是否被保留。(所有字串都是不可變的,但只有一些是 intern 的。)
最后,所有這些都與實際編程無關。如果您始終使用equals(...)測驗字串,則實習(或不實習)對程式行為沒有影響。
在現代 JVM 中,GC 的字串重復資料洗掉功能是管理可能重復字串所消耗的空間的更好方法,而不是實習。無論如何,文字/常量運算式占用的記憶體量應該是微不足道的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492587.html
