这两天看了好多有关==和equals的帖子,尤其是关于String和数组,现在还是有点迷茫。
public class Test{ public static void main(String[] args) 
{
String a=new String("abc");         
String b="abc";
System.out.print(a==b); }}为什么会是false?String a=new String("abc");这句是把对象“abc”的引用赋给变量a,这时在执行String b="abc"之前,“abc”就已经存在了,那变量b不就应该指向存在的这个“abc”吗?那输出的就应该是true才对,但结果是false,这中间有什么过程吗还?看了其它的帖子,砍刀一些高手说的什么用到对象池什么的,我还是不太明白,希望高手能给个详细的解释。

解决方案 »

  1.   

    String a=new String("abc"); 
    堆中,内存池中都创建
    String b="abc"; 
    上面的内存池中的
      

  2.   

    回2楼兄弟的话,看了不少贴了,没找到这个的解释,其它的我基本上都知道原因是什么了,但就是这个还有点不明白。
    照3楼说的,程序输出的应该是true了,但程序的结果是false。
      

  3.   

    String a=new String("abc");        
    String b="abc"; 
    这两条语句相当于是创建了两个对象
    ==在进行两个引用型变量之间的比较时,只有当两个引用变量引用同一个对象,它才为true,显然a和b是两个不同的对象,虽然它们的内容相同
    而equals只比较它们的内容
      

  4.   

    照4楼说的,那就是String b="abc";意味着新建了个对象了,那下面的程序怎么解释:
    public class Test{ public static void main(String[] args) 

    String a="abc";        
    String b="abc"; 
    System.out.print(a==b); } } 
    //输出结果是true请不要人云亦云,程序的输出结果我知道,我现也在可以死记住这个模式,但我还是想知道是为什么?(因为是自学,所以才发帖请教)
      

  5.   

    关于 String 对象的问题,真是经久不衰啊,从我来 CSDN 时就看到,到现在还是在讨论呢。关于 String 对象的东西,在 CSDN 至少能搜出上百个帖子。