String string1 = "this is";
String string2 = " cook";
String string3 = "this is cook";
String string4 = "this is cook";
String s = string1 + string2;
String s5 = s;
if(string3==string4){System.out.println("string3==string4");}
if(string3==s){
System.out.println("string3==s");
}else{
System.out.println("string3!=s");
}
if(string3==s5){
System.out.println("string3==s5");
}else{
System.out.println("string3!=s5");
}
if(string3.equals(s5)){System.out.println("string3.equals(s5)");}运行结果是:
        string3==string4
        string3!=s
        string3!=s5
        string3.equals(s5)我想问的是:既然 string3==string4 为什么 string3!=s ,string3!=s5
先谢各位的解答!!!

解决方案 »

  1.   

    1)  string3==string4 是因为都是指向一个地址,所以对象相等;
    2)string3!=s ,string3!=s5 因为不是指向一个地址,所以对象不相等;
    3)字符串的比较应该用 equals 
      

  2.   

    谢谢楼上的老兄 但是我还是不明白
    String string3 = "this is cook";
    String string4 = "this is cook";
    你的意思是 这样定义 二者就是指相同一个内存地址?

    String s = string1 + string2
    这样定义的话 虽然拼成的字符串内容相同 也不能指向同一个地址?不知道有什么依据可查么?谢谢
      

  3.   

    你弄懂 '==' 和equal 就知道 怎么回事了
      

  4.   

    java基础里面有教的慢慢研究
      

  5.   

    String s = string1 + string2
    这里新开辟了内存空间存放string1+string2的值
    所以与 s3,s4的地址不一样
    对于String对象来说== 比较对象内存地址,equals比较对象内容
      

  6.   

    这里用到java里面是一个串池的问题
    你s1+s2其实是在堆里面重新创建了一个新的对象s保存的是一个堆空间的地址
    而s3和s4你没有用new所以是在串池里面的他们地址相同
    所以s3==s4而s!=s3
    你可以用s.intern()方法来得到s在串池里面的地址s=s.intern();
    这样s就和s3,s4相等了
      

  7.   

    谢谢各位的回复 是我没说清楚问题 我明白== 和equals的区别 我这里是想讨论==的问题
    我把题目修改一下
    String string1 = "this is";
    String string2 = " cook";
    String string3 = "this is cook";
    String string4 = "this is cook";
    String s = string1 + string2;
    String s5 = s;
    if(string3==string4){System.out.println("string3==string4");}
    if(string3==s){
    System.out.println("string3==s");
    }else{
    System.out.println("string3!=s");
    }
    if(string3==s5){
    System.out.println("string3==s5");
    }else{
    System.out.println("string3!=s5");
    }

    运行结果是:
            string3==string4
            string3!=s
            string3!=s5
            我想问的是:既然 string3==string4 为什么 string3!=s ,string3!=s5先谢各位的解答!!!
      

  8.   

    kyo324() --有点明白你的意思了 我先看一下
      

  9.   

    简单具体的说就是s3,s4地址一样
    s和他们地址不一样
    s和s5地址一样你可以看s==s5就是true
    原因就是我说的
      

  10.   

    String string3 =new String( "this is cook");
    String string4 =new String( "this is cook");这样改的话string3就 != string4 了
      

  11.   

    ==和equals有差别的,前面几楼解释的很清楚了
      

  12.   

    字符串比较用equals就是深圳java程序员博客,为你提供多方面资料http://drivemewild.blogchina.com