大家觉得下面代码结果是什么?以及为什么呢?public class Test {
public static void main(String[] args){
String a = "ja";
a += "va";
String b = "j";
b += "ava";
System.out.println(a==b);
}
}结果是false,但是Java中不是有机制,如果即将创建一个与堆中对象相等的对象,那么在栈中的引用都将指向同一个对象.

解决方案 »

  1.   

    看下这个帖子
    http://topic.csdn.net/u/20090519/18/7b8cf7ef-bc06-4d26-8a2c-692eb0562231.html
      

  2.   

    怎么又是String。。研究这个这么有意思啊。。
      

  3.   

    相同得是string对象池得值
    运算不是在堆里进行得嘛
      

  4.   

     !我以为输入应该是true!等待受教中!
      

  5.   

    一楼帖子里面说的很清楚了
    我认为
    关于这里的false的原因:
    a += "va";相当于a = a+ new String("va");
    b += "ava";同上
    也就是说
    就算你在常量池有"java",你去new String("java");后者依然会被分配一个引用
    只要引用不同,"=="比较就肯定是false
      

  6.   

    a+"va"等同a=a+new String("va");
    b+"ava"等同b=b+new String("ava");
    由于new了,所以用==比较肯定是false 
      

  7.   

    最后比较的是什么?是引用,对吗?
    最后"java"字符串都在堆中,对吧?
    既然都在堆中,那么2个引用其实指向的同一个对象.
    既然是这样,你把我驳倒,然后说清楚点.别不清不楚的.
      

  8.   

    又是String每天都能看到好几帖。