[英]Java String Literal Pool
假設我們有以下代碼
String x = new String("xyz");
String y = "abc";
x = x + y;
我的一個朋友說總共創建了4個對象,而我說的只有3個。 有人可以解釋背景情況嗎? 我已經讀過有關字符串文字池的信息,但是我可以找到答案。
我對創建3個對象的解釋如下:一個在編譯時位於字符串文字池中(“ abc”),另一個在運行時位於堆上(“ abc”和x + y)
將創建4個對象。
字符串unmodifiable
因此每次將它們串聯時,都會創建一個新對象
在的情況下, "xyz"
在new String("xyz");
您首先創建“ xyz”對象,然后將其傳遞到新對象(字符串)中,所以這里有兩個對象
new String("xyz") <--there are two objects
"abc" <-- kinda obvious
x + y <-- String are unmodifiable thus this is a new object
如下創建4個對象
// 1. "xyz" in the literal pool
// 2. a new String object which is a different object than "xyz" in the pool
String x = new String("xyz");
// 3. "abc" in the literal pool
String y = "abc";
// 4. new String object
x = x + y;
實際上..當兩個字符串的值相同時,字符串池才起作用。
例如,如果我們有String s1 =“ abc”和s2 =“ abc”,則s1和s2都將指向相同的內存引用(或對象)。
在上述情況下,將創建3個對象
用於x堆上的變量
對於堆棧上的y變量
用於堆上的x + y表達式
是的,代碼將創建4個對象
String x = new String("xyz"); // object#1 : xyz and Object #2: new String
String y = "abc"; // Object#3 : abc
x = x + y; // object#4 : xyzabc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.