String c="a"+"b";
String s="ab";
System.out.println(s==c);
结果相等
String a="a";
String b="b";
String c=a+b;
String s="ab";
System.out.println(s==c); 
为什么结果不相等???

解决方案 »

  1.   

    晕,多看点java基础的书System.out.prinltn(s.equals(c));
    java字符串是对象 s==c是比较它们在内存中的地址
      

  2.   

    s==c 比较的是内存地址,当然不同.
    比较内容的话可以用:
    s.equals(c)
      

  3.   

    String c="a"+"b";可能会在字符串常量池中产生一个"ab"字符串常量吧。String a="a";
    String b="b";
    String c=a+b;可能不会在字符串常量池中产生一个"ab"字符串常量吧。
      

  4.   

    ==
    肯定是不等于的了。...
    equals()
    你试下看。...
      

  5.   

    equals()比较的是字符串的内容
    而==比较的是reference
      

  6.   

    ==和EQUAL的区别:
           .....
      

  7.   

    用==是比较内存地址是否相等,字符串内容比较要用equals
      

  8.   

    java规定字符串常量只存在一个引用。
    所以不管
    String c="a"+"b";
    String s="ab";
    在内存中只有一个“ab”。c和s都是指向一个常量“ab”,所以c和s肯定是相等的。
    这个问题还有就是常量池的问题
    JVM在定义c和s的时候。所有常量都放在一个常量池里。因为C和S现在是个常量。直接常量与直接常量相加等于常量。JVM在编译时已经知道这个常量了。
    而下面的String a="a";
    String b="b";
    String c=a+b;
    String s="ab";
    System.out.println(s==c); JVM在编译时只放入了常量 a ,b,s,
    c在编译时根本没有经过运算。不是一个常量,只有在运行时才能知道结果。。所是他是新产生的对象。故内存地址并不一样。所以不等。
    建议看下候结写那个JAVA编程思想。里面对于常量池有详细的说明。
      

  9.   

    725137(2005年不会菜) 
    Very Good。。
    好像C#中对字符串的处理也是这样子的
    不管建立多少个引用,只要字符串的内容相同,引用所指向的都是同一个内存地址,但是
    内容却是不可以更改的》。
      

  10.   

    http://blog.csdn.net/f_acme/archive/2005/12/18/555267.aspx