本篇是小白笔记,用于记录学习java过程中的难点疑点。
贴代码
public static void main(String[] args) {
String str1="imooc";
String str2="imooc";
String str3=new String("imooc");
System.out.println("str1和str2的地址相同?"+(str1==str2));
System.out.println("str1和str3的地址相同?"+(str1==str3));
}
Java的内存空间中,有常量池、栈和堆。其中的栈是用于存放类的引用,常量池是用来存放常量,堆是用来存放new创建的对象。
在上述代码String str1="imooc";语句中,会在栈当中生成str1引用,同时在常量池中生成imooc常量,且str1引用指向imooc,同理String str2="imooc";语句,会在栈中生成str2引用,由于常量池中已经有imooc常量,故str2和str1指向同一个imooc。
执行String str3=new String("imooc");语句,会 在栈当中生成str3引用,并在堆当中创建一个对象,并且将str3指向该对象,若有第四条语句String str4=new String("imooc");则会在堆中再新建一个对象,此时str3!=str4。
