在内存分配和字符串池方面,这两个分配有什么区别。
String b = "sunil" + "khokhar";
和
String a = "sunil";
String b = a + "khokhar";
答案 0 :(得分:2)
String b = "sunil" + "khokhar";
将"sunil"
和"khokar"
连接在一起,b
的值将在编译时解析。因此,"sunilkhokhar
将出现在 String常量池中。
和
String a = "sunil";
String b = a + "khokhar";
"sunil"
和"khokar"
将是编译时常量(并添加到字符串池中)。
但b = a+"khokhar"
将使用StringBuilder
完成,并将在运行时发生。
因此,b
将存在于堆中而不存在于 String常量池中。
答案 1 :(得分:0)
每次用户“+”和“=”时,String都是最终类,将创建新对象。对于变量赋值,如果值已存在于池中,则引用将与Object一起返回。