案例一.
String a1=new String("123");
String a2=new String("123");
System.out.println(a1==a2);//false
最后输出方法中比较的是a1和a2的地址,两者是两个对象因此地址肯定是不相等的,所以要返回false。
图一.
案例二.
String a1=new String("123");
String a2="123";
System.out.println(a1==a2);//false
前者的图示为图一,将常量池中对象的地址给堆中的对象来存储,堆中的对象再将自己在堆中的地址传递给栈中的a1进行存储。而后者是直接将常量池中的对象的地址传递给了栈中的a2。
案例三.
String c=new String("123456");
String d=c;
System.out.println(c==d);//true
本案例是将c的地址直接给了d,所以是true。
总结:
- String进行new之后必会产生新的对象
- String是定长的,改变后,地址发生改变。