public class Test2{
public static void main(String[] args){
String s1 = "hello";
String s2 = new String("hello");

System.out.println("s1==s2 is "+s1==s2);        System.out.println("s1==s2 is "+(s1==s2));
}
}为什么打印结果是
false
s1==s2 is false

解决方案 »

  1.   

    1楼正解,比的是内存地址,因为他们都是一个对象,
    但是如果要用s1.equals(s2)的话,返回的就是true
      

  2.   

    可以试下equals 方法   理解的更深
      

  3.   

    这个问题不知道讨论过多少遍了……因为==只是判断两个对象的地址是否相同,而不是内容。String类提供了equals和equalsIgnoreCase方法来比较字符串内容是否相等。楼主应该自习看看书,这应该算是一个很经典的基本知识点。
      

  4.   

    因为它们是两个不同的对象,内存地址不一样
    equals就会比较他们所带的字符串的值,就会返回true了
      

  5.   

    s1和s2是两个不同的对象,s2是引用了s1的赋值,而“==”比较的是s1、s2的引用地址,当然是false了。
      

  6.   

    LZ的第一句输出语句其实是输出"s1==s2 is " + s1 与 s2 的比较结果 所以就输出了个false第二句输出语句才是LZ的本意吧至于为什么输出false LS各位都说了
      

  7.   

    第一个,因为+的优先级大于==,所以先执行+运算,得到的新字符串与s2做==运算,结果输出为false
    第二个,……
      

  8.   

    建议你看以下这个吧:
    http://blog.csdn.net/comaple/archive/2011/06/15/6546946.aspx
      

  9.   

    LZ首先两个都应该输出的是s1==s2 is false吧!这个你要看看是什么数据类型在用==号在比较,如果是String类型的,用==,那么它比较是两个值(其实是两个东东)它所在的位置,比分说你有一首歌曲放在你电脑的C盘,你复制一份放到你的D盘,如果你用==去比较,它比较的是“C:/”==“D:/”你觉得这俩个相同吗?显然不相同,所有返回是一个false,如果你想它得到的是true你可以用equals,它比较的是什么:“”equals“”,他们很明显是相同的。它比较的是值。LZ应该懂了吧。