// String a2 = "aa"创建了一个对象,这个对象在方法区的常量池中,常量池中会为aa开辟一个空间并给一个地址值
//并把地址值赋值给a2
//如果常量池中有 那么就直接把这个地址给a2
String a2 = "aa";
// String b2 = new String("aa"); 创建了两个对象一个在方法区中的常量池中"aa" , 在堆内存中开辟一个空间,
//并提供一个地址值然后将常量池中aa这个值复制一份在堆内存中,再将堆内存中"aa"地址值复制给b2
String b2 = new String("aa");
// 两个对象等于号所比较的是地址值
System.out.println(a2 == b2);// flase b2是堆内存中的地址值,所以和a2不一样
System.out.println("aa" == b2);// flase b2是堆内存中的地址值, 所以地址值和常量池中的aa地址不一样
System.out.println("aa" == a2);// true a2本身拿的是常量池中的aa地址所以一样 |