我们说我们有以下代码
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)
答案 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个对象
用于堆上的x varible
表示堆栈上的y变量
表示堆上的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