Java字符串文字池

时间:2015-05-29 08:27:55

标签: java string literals pool

我们说我们有以下代码

String x = new String("xyz");
String y = "abc";
x = x + y;

我的一位朋友说总共创建了4个对象,我说只创建了3个。有人可以解释后台发生了什么吗?我读过有关String Literal Pool的内容,但我可以找到答案。

我对3对象创建的解释如下:在编译时在String Literal Pool中有一个(" abc"),在堆上运行时有两个(" abc&# 34;和x + y)

4 个答案:

答案 0 :(得分:2)

将创建4个对象。

字符串是@jltransaction.jewelloan.try(:loan_amount) 所以每次连接它们时都会创建一个新对象

unmodifiable "xyz"的情况下,您首先创建“xyz”对象,然后将其传递给新对象(String),这样,这里有两个对象

new String("xyz");

答案 1 :(得分:2)

创建了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;

答案 2 :(得分:0)

实际上..字符串池在两个字符串都有相同的值时有效。

例如,如果我们有String s1 =“abc”和s2 =“abc”,则s1和s2都将指向相同的内存引用(或对象)。

在上述情况下,将创建3个对象

  1. 用于堆上的x varible

  2. 表示堆栈上的y变量

  3. 表示堆上的x + y表达式

答案 3 :(得分:0)

是的,代码将创建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