public class Demo07 {
public static void main(String args[])
{
String xingming="xiexingxing";
String xing="xie";
String ming="xingxing";
System.out.println(xingming=="xie"+"xingxing");
System.out.println(xingming==xing+ming);
}
}
运行结果:true false
总结:如果加号两边的是字面值(字面值就是直接在""里写的值,比如上面的"xie"与"xingxing"),那么将在池里查找有没有对应内容的对象,并返回池里的对象。如果加号两边不满足上面条件(比如,两边的值是引用值或者堆里面的字符串对象),那么将不会在池里查找"xiexingxing",而是直接在堆里生成一个新的对象
public class Demo01 {
public static void main(String args[]){
String x1="Hello"; //在常量池中创建“Hello”
String x2=x1; //将x1的值赋给x2
System.out.println(x1==x2);//结果输出为true,说明x2也指向常量池中的“Hello”
x1+="World"; //个人感觉x1指向的是堆内存的“HelloWorld”
String x3="HelloWorld"; //在常量池中创建“helloWorld”
System.out.println(x1);
System.out.println(x2);
System.out.println(x3==x1);//输出结果为false,说明x1不是指向常量池中的“HelloWorld”,个人感觉x1指向堆中的新建的“HelloWorld”,不是很清楚,希望高手指教
}
}
运行结果:
true
HelloWorld
Hello
false