日期:2014-05-20  浏览次数:20718 次

新手JAVA急求助,关于String变量
public class RAL {
public static void main(String args[]){
String aa="a";
String bb="a";
System.out.println(aa==bb);
aa=new String("a");
bb=new String("a");
System.out.println(aa==bb);
}
}
结果是
true
false
请问为什么第二个输出时false,百思不得其解,求各位大大解释,谢谢

------解决方案--------------------
用一个new关键字,new关键字的作用就是分配内存,你第二个就是那内存地址起比较,肯定不同,你用aa.equals(bb)比较的才是值,你第一个没有new关键字,比较的就不是内存地址,就是里面的值
------解决方案--------------------
其实很简单的,如果你对jvm了解一点就很明显了。
String aa="a";
String bb="a";
这两个字符串来自于字符池,自然而然他们的内存地址肯定是相等的,
aa=new String("a");
bb=new String("a");
你是新产生的两个对象,那么aa和bb的内存地址那肯定是不等的了。自然就等于false咯。
你在程序中加上这句再看看:
System.out.println(aa.intern()==bb.intern());

String aaa = "a";
System.out.println(aaa==bb.intern());