String Java中的字符串连接和不变性

String Java中的字符串连接和不变性,string,concatenation,String,Concatenation,由于String是一个不可变的对象,我们不能更改字符串。但运行此代码后,字符串的值将为“HelloWorld”。谁能解释一下原因吗 class StringTest { public static void main(String args[]) { String str1="Hello"; String str2="World"; str1=str1+str2; System.out.println(str1);

由于
String
是一个不可变的对象,我们不能更改字符串。但运行此代码后,字符串的值将为“HelloWorld”。谁能解释一下原因吗

class StringTest
{
    public static void main(String args[])
    {
        String str1="Hello";
        String str2="World";
        str1=str1+str2;
        System.out.println(str1);
    }
}

运行此代码时,您正在创建一个新的字符串对象,并使str1指向新字符串


您并没有更改str1值,您只是创建了一个新值,并删除了(自动使用GC)旧值。换句话说,str1引用的是另一个对象。

运行此代码时,您正在创建一个新字符串对象,并使str1指向新字符串


您并没有更改str1值,您只是创建了一个新值,并删除了(自动使用GC)旧值。换句话说,str1引用的是另一个对象。

运行此代码时,您正在创建一个新字符串对象,并使str1指向新字符串


您并没有更改str1值,您只是创建了一个新值,并删除了(自动使用GC)旧值。换句话说,str1引用的是另一个对象。

运行此代码时,您正在创建一个新字符串对象,并使str1指向新字符串


您并没有更改str1值,您只是创建了一个新值,并删除了(自动使用GC)旧值。换句话说,str1引用的是另一个对象。

str1和str2引用的是字符串对象,而不是字符串对象。当你写作时:

str1=str1+str2;
str1将引用通过计算str1+str2创建的新字符串对象

事实上,您可以尝试:

String str1 = new String("Hello");
String str2 = new String("World");
String str4 = new String("Hello");

// False: content ("Hello") is the same, but the object instance is different
System.out.println(str1 == str4); 

String str3 = str1;

// True: refers to the same object
System.out.println(str1 == str3); 

str1 = str1 + str2;

// False: a new object has been created and put in str1
System.out.println(str1 == str3); 

String str1=new String(“Hello”)
符号与编写
String str1=“Hello”
基本相同,只是它绕过了一些可能使此示例无法按预期工作的优化(请参见注释)。

str1和str2是对字符串对象的引用,而不是字符串对象。当你写作时:

str1=str1+str2;
str1将引用通过计算str1+str2创建的新字符串对象

事实上,您可以尝试:

String str1 = new String("Hello");
String str2 = new String("World");
String str4 = new String("Hello");

// False: content ("Hello") is the same, but the object instance is different
System.out.println(str1 == str4); 

String str3 = str1;

// True: refers to the same object
System.out.println(str1 == str3); 

str1 = str1 + str2;

// False: a new object has been created and put in str1
System.out.println(str1 == str3); 

String str1=new String(“Hello”)
符号与编写
String str1=“Hello”
基本相同,只是它绕过了一些可能使此示例无法按预期工作的优化(请参见注释)。

str1和str2是对字符串对象的引用,而不是字符串对象。当你写作时:

str1=str1+str2;
str1将引用通过计算str1+str2创建的新字符串对象

事实上,您可以尝试:

String str1 = new String("Hello");
String str2 = new String("World");
String str4 = new String("Hello");

// False: content ("Hello") is the same, but the object instance is different
System.out.println(str1 == str4); 

String str3 = str1;

// True: refers to the same object
System.out.println(str1 == str3); 

str1 = str1 + str2;

// False: a new object has been created and put in str1
System.out.println(str1 == str3); 

String str1=new String(“Hello”)
符号与编写
String str1=“Hello”
基本相同,只是它绕过了一些可能使此示例无法按预期工作的优化(请参见注释)。

str1和str2是对字符串对象的引用,而不是字符串对象。当你写作时:

str1=str1+str2;
str1将引用通过计算str1+str2创建的新字符串对象

事实上,您可以尝试:

String str1 = new String("Hello");
String str2 = new String("World");
String str4 = new String("Hello");

// False: content ("Hello") is the same, but the object instance is different
System.out.println(str1 == str4); 

String str3 = str1;

// True: refers to the same object
System.out.println(str1 == str3); 

str1 = str1 + str2;

// False: a new object has been created and put in str1
System.out.println(str1 == str3); 

String str1=new String(“Hello”)
符号本质上与编写
String str1=“Hello”
符号相同,只是它绕过了一些可能使此示例无法正常工作的优化(请参阅注释).

当您执行“str1+str2”时,您基本上是在创建新的字符串对象并将其引用分配给str1。在这种情况下,对“Hello”的引用已替换为对新创建字符串的引用。

当您执行“str1+str2”时,您基本上是在创建新字符串对象并将其引用分配给str1。在这种情况下,对“Hello”的引用已替换为对新创建字符串的引用。

当您执行“str1+str2”时,您基本上是在创建新字符串对象并将其引用分配给str1。在这种情况下,对“Hello”的引用已替换为对新创建字符串的引用。

当您执行“str1+str2”时,您基本上是在创建新字符串对象并将其引用分配给str1。在本例中,对“Hello”的引用已替换为对已创建新字符串的引用。

因为str1+str2正在创建一个新字符串,其中包含“Hello World”,您将此字符串分配给str1。您还可以编写:String str3=str1+str2;你能在你的问题中添加“Java”标记吗?因为str1+str2正在创建一个新字符串,其中包含“Hello World”,你可以将这个字符串分配给str1。您还可以编写:String str3=str1+str2;你能在你的问题中添加“Java”标记吗?因为str1+str2正在创建一个新字符串,其中包含“Hello World”,你可以将这个字符串分配给str1。您还可以编写:String str3=str1+str2;你能在你的问题中添加“Java”标记吗?因为str1+str2正在创建一个新字符串,其中包含“Hello World”,你可以将这个字符串分配给str1。您还可以编写:String str3=str1+str2;你能在你的问题中添加“Java”标记吗?由于Java字符串池,这些语句不能100%正确。您应该执行
newstring(“Hello”)
等操作,使其100%工作。由于Java字符串池的原因,这些语句不能100%为true。您应该执行
newstring(“Hello”)
等操作,使其100%工作。由于Java字符串池的原因,这些语句不能100%为true。您应该执行
newstring(“Hello”)
等操作,使其100%工作。由于Java字符串池的原因,这些语句不能100%为true。您应该执行
新建字符串(“Hello”)
等操作,使其100%工作