class  KK
{
public static void main(String args[])
{
String s1="1234";
String s2,s3;
s2="5678";
s3="5678";
System.out.println(s2==s3);

}
}//第一个程序
class  KK
{
public static void main(String args[])
{
String s1="1234";
String s2,s3;
s2=s1+"5678";
s3=s1+"5678";
System.out.println(s2==s3);

}
}//第二个程序
请问各位前辈:为什么第一个程序结果会是真而第二个就为假了呢?
还有一个问题:“地址和引用是一回事吗?”请前辈们指教谢谢大家

解决方案 »

  1.   

    第一个程序,s2和s3都指向string pool中的字符串常量(该常量在编译期创建),指向和内容都相同
    第二个程序,由于有+,所以在运行期会在堆创建2个新的对象,地址不同,内容相同
    ==比较的是地址,所以是false楼主如果不是很理解string,可以先简单的人为,只要有+,并且+的两边不全是常量,就等于是new关键词好比,s2=new String("5678");
         s3=new String("5678");
    s2==s3返回的是false
      

  2.   

    "=="比较的是内存地址.
    通常比较字符串是否相同用equals方法
      

  3.   

    谢谢GAO11811的前辈!我明白这处问题了,我的很多问题多亏你的帮助,你的解释很透彻,详细,谢谢你,祝一切顺利