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%工作