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

s1 s2引用不同的实体,s3 s4是引用同一个实体...
String   s1,s2;
s1=new   String( "we   are   students ");
s2=new   String( "we   are   students ");

String   s3,s4;
s3= "how   are   you ";
s4= "how   are   you ";


s1   s2引用不同的实体
s3   s4是引用同一个实体

为什么会不同呢?

------解决方案--------------------
实际上String 类型的值是放在一个字符串常量池里,s3="how are you"; s4="how are you";当s3执行完了后池里有一个对象,内容就是"how are you",再执行s4 的话,jvm首先会去池中找,当在池中找到"how are you"的话,s4直接引用它,若没找到,在创建新的对象引用. 
s1=new String("we are students"); s2=new String("we are students");栈中的s1,s2分别引用堆中两个对象,堆中的这两个对象指向常量池中的同一个常量"we are students",所以s1,s2的并不相等.