对象用equals方法阿
如:b1.equals(b2)

解决方案 »

  1.   

    s1是对"a"创建的一个对象,并成为它的引用而s2是对"a"的引用,s1,s2的引用不同,当然是false了
      

  2.   

    堆內存與棧內存的區別..只有同時指向堆內存種的同一個對象才true
      

  3.   

    to scbb2001(山城棒棒) : 我先搞明白它,请不要转移话题。
    谢谢其他几位。我明白:s1和s2的引用不同,所以s1==s2返回false.问题就在为什么引用不同啊?
      

  4.   

    AlexLJM(小桥流水)
    说得对,就是内存堆与堆栈的问题,
    用==是对堆栈的比较  对象的名字和所有原始类型都放到堆栈中
    而equals是对内存堆的比较 对象本身是放在内存堆中的
      

  5.   

    s1是String 对象的引用,而s2是"a"的引用,当然不同
      

  6.   

    String s1 = new String("a");  这种方式会创建两个对象,这个你已经知道。我们假设这两个对象的内存地址分别是:
    001    //s1所指向的对象。
    002    //“a”所创建的对象。因为002的对象显式创建的(也就是通过“内容”这样的方式new出来的。),所以002的对象会被放进一个池。这个池是所有显式创建的String对象共享的。所以在s2 = "a";
    的时候,s2指向了002的对象。
      

  7.   

    String s="a", 这里的"a"存储在内存堆栈中。 //对象句柄和所有原始类型都放到堆栈中而String s = new String("a"),把"a"存储在内存堆中,对象句柄s存储在内存堆栈中,
    并指向内存堆中的"a"。                    //对象本身是放在内存堆中的用==是对堆栈的比较,而equals是对内存堆的比较,当然是返回false了
      

  8.   

    ==比较的是两个字符串的引用值,尽管"a"和new String("a")的值相同,但是其引用不同。
    系统分配空间是,认为这是两个不同的常量。
    字符串要做值的比较,可以用equals方法。字符串类本身就是常量类,创建以后就不能改变其值(但是可以引用值可以改变,使其指向新的字符串)。