又是copy来的请问
s1=new String("Happy")

s1="Happy"有什么区别
分别是在什么情况下应用的呢(1)
举个例子:String str = "Happy";
String s1 = "Happy";out.print(s1==str);//the result is true but:
String str = "Happy";
String s1 = new String("Happy");out.print(s1==str);//the result is false
(2)
new String("Happy")
显拭创建一个对象。String s1 = "Happy" 隐式创建一对象。
从使用角度,二者其本没有区别。对于
String str = "Happy";
String s1 = "Happy";
out.print(s1==str);//the result is true 
上述条件未必永远成立,
取决于编译器的实现。

解决方案 »

  1.   

    是这样的,
    java里有优化处理机制,
    这个机智就是:
    如果你直接:String s="AAA",
    注意,是直接给了数值,而不是通过new String("AAA"),
    则,jvm会在内部一个列表内给你分配地址,
    等你再String s2="AAA"时,jvm会查这个列表,看是否有“AAA”,如果有,就重用。但,对于new String("AAA")则每次都会申请新的地址,不会做优化处理。
    所以,产生了你的现象。
      

  2.   

    “对于
    String str = "Happy";
    String s1 = "Happy";
    out.print(s1==str);//the result is true 
    上述条件未必永远成立,
    取决于编译器的实现。”个人认为上面的言论是错误的。他们永远成立。只要是sun的标准java虚拟机。
      

  3.   

    这也就是什么比较字符串的值为什么要用str1.equals(str2)。