-
字符串常量池:当使用字符串字面量(如
"f"
)时,JVM会尝试在字符串常量池中查找是否已经存在该字符串。如果存在,则返回该字符串的引用;如果不存在,则在池中创建一个新的字符串对象。 -
堆内存:使用
new
关键字创建的字符串对象会在堆内存中分配。
package com.caihua.service;
import lombok.Data;
@Data
public class Boy {
private static final String EE="f";//常量池
private Boolean kk;
private String name;
public static void main(String[] args) {
String a= "f"; //常量池
String b= "f";//常量池
Boy boy = new Boy();
String c = new String("f"); //堆
String d = new String("f");//堆
boy.setName(c); //堆
Boy boy2 = new Boy();
boy2.setName("f");//常量池
System.out.println(a==b); //true
System.out.println(c==b); //false
System.out.println(c ==d);//false
System.out.println(EE ==a);//true
System.out.println(EE ==c); //false
System.out.println(a==boy.name); //false
System.out.println(boy.name==c);//true
System.out.println(EE ==boy.name); //false
System.out.println(a==boy2.name);//true
System.out.println(boy2.name==c); //false
System.out.println(EE ==boy2.name);//true
}
}