计算机存储中存在一个堆区域,堆区域中存在一个常量池,当申请了字符串变量后,会将值放入常量池中,下次申请新的变量时,会优先从常量池中查找,如果常量池中已经存在,则变量会直接指向常量池中的值,从而节省空间(jdk1.8之后的字符串常量池存在于堆中)
String x1 = "aaa"; // 在常量池中申请空间放入"aaa"
String x2 = "sss";
String x3 = "aaa"; //这里x3和x1就指向常量池中同一个位置
String x4 = new String("aaa"); // 这里表示要重新创建一块新的空间(不在常量池内)(x4的指向),这块空间会指向常量池中"aaa"的位置
String x5 = new String("aaa"); // 同上
String x6 = new String("ccc"); // 创建一块新的空间,同时在常量池创建一个"ccc",并通过新创建的空间引过来
//x1==x3 true; x4==x1 false; 这里双等于号比较的是第一指向,x1,x3的第一指向是常量池中的"aaa",而x4的第一指向是开辟的新空间(新空间中的内容才是指向常量池中的"aaa")
标签:aaa,常量,指向,池中,字符串,Java,x1,String
From: https://blog.csdn.net/dawn191228/article/details/141033709