String x = "100"; 
java会先在内存中查找有没有"100"这个字符串对象存在,如果存在就把x指向这个字符串对象
同理y也指向这个对象
因此 x==yString x = new String("100");
则不论内存中是否已经存在"100"这个字符串对象,都会新建一个对象
同理 y 也指向另一个新建的对象
因此 x != y

解决方案 »

  1.   

    String是类,不是基本类型,在java.lang这个包里,这个说法没错。
    a1==a2
    a3<>a4,但是a3.equals(a4)成立
      

  2.   

    String x = "100"; 
    java会先在内存中查找有没有"100"这个字符串对象存在,如果存在就把x指向这个字符串对象
    同理y也指向这个对象
    因此 x==yString x = new String("100");
    则不论内存中是否已经存在"100"这个字符串对象,都会新建一个对象
    同理 y 也指向另一个新建的对象
    因此 x != y
      

  3.   

    String是类不是基本类型这是对的。但String在JAVA中是一种比较特殊的类。在大多数应用中,以上的两种定义没有区别,但当比较时就有区别了,也是一种比较特殊的情况。
    因为==对类是比较引用(地址)而,String类的equals()方法是比较内容了。
    第一种定义时当第一次出现“hello”JAVA会在内存中建立一个常量地址,第二次出现时就直接使用了,所以第一种定义时,用a1==a2比较为true,用a1.equals(a2)比较也为true。
    而第二种定义就不同了,JAVA会每次新建立一块内存区域并把内存首址返回给句柄,所以用==比较返回false,而用equals()比较会返回true。