Java 字符串内存分配和字符串池概念

Java 字符串内存分配和字符串池概念,java,string,memory-management,string-pool,Java,String,Memory Management,String Pool,这两个赋值在内存分配和字符串池方面有什么区别 String b = "sunil" + "khokhar"; 及 “sunil”和“khokar”都将被连接,并且b的值将在编译时解析。因此,“sunilkhokhar将出现在字符串常量池中。 及 “sunil”和“khokar”将是编译时常量(并添加到字符串池)。 但是b=a+“khokar”将使用StringBuilder完成,并将在运行时发生。 因此,b将出现在堆中,而不是字符串常量池中。String是每次使用“+”和”时的最后一个类=“将

这两个赋值在内存分配和字符串池方面有什么区别

String b = "sunil" + "khokhar";

“sunil”
“khokar”
都将被连接,并且
b
的值将在编译时解析。因此,
“sunilkhokhar
将出现在字符串常量池中。 及

“sunil”
“khokar”
将是编译时常量(并添加到字符串池)。 但是
b=a+“khokar”
将使用
StringBuilder
完成,并将在运行时发生。
因此,
b
将出现在堆中,而不是字符串常量池中。

String是每次使用“+”和”时的最后一个类=“将创建新对象。对于变量赋值,若值已经存在于池中,那个么引用将和对象一起返回。

你们认为会发生什么?您认为编译器和字符串池会有什么不同?您是否考虑过使用
final
会有什么不同?这有什么关系。您希望使用上述方法的实际需求是什么?并非每次都如此。不,仅当您使用的引用在连接过程中不是最终引用时。因此,如果
a
是最终的,
a+“khokhar”
将在编译时被解析。我认为在字符串b=“sunil”+“khokhar”的情况下,只创建了一个值为“sunilkhokhar”的对象和字符串池中引用该对象的一个条目;字符串b=a+“khokar”;在中创建了两个对象和两个引用@如果是am,请稍等wrong@SunilKhokhar-3个字符串对象。“sunil”和“khokhar”将位于字符串常量池中,“sunilkhokhar”将位于堆中。那么一共三个。
String a = "sunil";
String b = a + "khokhar";
String b = "sunil" + "khokhar";
String a = "sunil";
String b = a + "khokhar";