当:String s1="123";
    String s2="123";
if(s1==s2) 和 if(s1.equals(s2))  的结果都是true ;当:String s1 = new String("123");
    String s2 = "123"; 
if(s1==s2) 结果为false ,if(s1.equals(s2))  的结果都是true ;
是为什么啊,new 和没有用 new 的区别在哪??? 

解决方案 »

  1.   

    用new的话产生了两个String 类型的对象一个是s1指向的对象,另一个 是"123"本身,虽然他们的值都是"123",但是在内存是占用不同的空间只是拥有相同的值
      

  2.   

    java的经典问题了
    java虚拟机对于String s1="123";之类的语句做了特别的优化,当实例池中已经存在了值为123的String对象,则不再产生新的对象,而重用这个老对象,所以s1和s2都引用了同个对象,所以==返回true
    而使用new String()则一定产生新的对象,用==判断当然不等