String a = "abc";
String c = new String("abc");
String d = c.intern();
Scanner s = new Scanner(System.in); //键盘输入abc
String e = s.next();

System.out.println(a == d);  //这个是true
System.out.println(a == e);  //这个是false
}
---------------
为什么第一个是true ,第二个是false?

解决方案 »

  1.   

    intern()直接返回字符串池的对象,a也是直接引用字符串池的对象,所以为true.
    第2个就是一般情况,不用说都是false的了
      

  2.   

    但凡涉及到String的比较,不用==号比较!但凡要比较String的内容,只准调用equals方法进行比较!
      

  3.   

    http://blog.csdn.net/mengxiangyue/article/details/6823575
    看看这个
      

  4.   

    但凡涉及到String的比较,不准用==号比较!
      

  5.   

    == 比较的是string 池的对象。
      

  6.   

    intern()直接返回字符串池的对象,不包含地址,所以a==d为true
    ==比较的不仅是值,也比较地址,所以a == e 是false
      

  7.   

    String作为一个类,也有构造方法,所以我们创建String的方式有两种:
    1.String s="ABC";
    将s引用一个已经存在的"ABC"对象,这个"ABC"是个字面值,在程序中无论有多少"ABC",它们都是同一个对象
    2.String s=new String("ABC");
    将s引用一个新建的String对象,然后将"ABC"对象的值copy一份传入到这个新建的String对象中一般情况下我们创建String都是通过第一种方式直接引用已存在的对象
    而String的构造方法主要是用于将字符/字节数组转换为String任何试图对String的修改操作都会导致产生一个新的String对象,而原对象永远不会被改变