Java字符串文字池
假设我们有以下代码Java字符串文字池,java,string,literals,pool,Java,String,Literals,Pool,假设我们有以下代码 String x = new String("xyz"); String y = "abc"; x = x + y; 我的一个朋友说总共创建了4个对象,我说只创建了3个。有人能解释一下背景中发生了什么吗?我读过关于字符串文字池的文章,但我可以找到一个答案 我对创建3对象的解释如下:一个在编译时(“abc”)在字符串文本池中,两个在运行时在堆上(“abc”和x+y)实际上。。当两个字符串都有相同的值时,字符串池工作 例如,如果我们有字符串s1=“abc”和s2=“abc”,那
String x = new String("xyz");
String y = "abc";
x = x + y;
我的一个朋友说总共创建了4个对象,我说只创建了3个。有人能解释一下背景中发生了什么吗?我读过关于字符串文字池的文章,但我可以找到一个答案
我对创建3对象的解释如下:一个在编译时(“abc”)在字符串文本池中,两个在运行时在堆上(“abc”和x+y)实际上。。当两个字符串都有相同的值时,字符串池工作 例如,如果我们有字符串s1=“abc”和s2=“abc”,那么s1和s2都将指向相同的内存引用(或对象) 在上述情况下,将创建3个对象
实际上。。当两个字符串都有相同的值时,字符串池工作 例如,如果我们有字符串s1=“abc”和s2=“abc”,那么s1和s2都将指向相同的内存引用(或对象) 在上述情况下,将创建3个对象
将创建4个对象 字符串是不可修改的,所以每次连接它们时都会创建一个新对象 在
新字符串(“xyz”)中的“xyz”
代码>首先创建“xyz”对象,然后将其传递到新对象(字符串)中,因此,这里有两个对象
new String("xyz") <--there are two objects
"abc" <-- kinda obvious
x + y <-- String are unmodifiable thus this is a new object
将创建新字符串(“xyz”)4个对象
字符串是不可修改的
,所以每次连接它们时都会创建一个新对象
在新字符串(“xyz”)中的“xyz”
代码>首先创建“xyz”对象,然后将其传递到新对象(字符串)中,因此,这里有两个对象
new String("xyz") <--there are two objects
"abc" <-- kinda obvious
x + y <-- String are unmodifiable thus this is a new object
newstring(“xyz”)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;
创建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;
是,代码将创建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
是,代码将创建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
你在说哪个JVM?它可能是特定于实现的。不考虑JVM,如何创建4个对象?第四个对象是什么?是的,有三个,“xyz”、“abc”和“xyzabc”。你错过了新字符串
@Arvind你所说的“你错过了新字符串”是什么意思。新字符串的作用是在运行时在堆上创建一个新对象?它可能是特定于实现的。不考虑JVM,如何创建4个对象?第四个对象是什么?是的,有三个,“xyz”、“abc”和“xyzabc”。你错过了新字符串
@Arvind你所说的“你错过了新字符串”是什么意思。新字符串的作用是在运行时在堆上创建一个新对象。这意味着,如果我想要String y=“abc”;字符串x=新字符串(y);x=x+y
那么我就只有3个对象了?好吧,我想我开始明白了。这意味着,如果我想要String y=“abc”;字符串x=新字符串(y);x=x+y
那么我就只有3个对象了?