刚才看一朋友的题第一个是这个
String s1 = “aaa”;
String s2 = “aaa”;
String s3 = new String(“aaa”);
String s4 = new String(“AAA”);
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1.equals(s3));
怎么s1==s2会是真,做完结果也还真是true不是S1在堆里创建一个对象后S2又在堆里创建一个对象啊?
S1和S2这2个对象的引用怎么会相等????
虽然都是创建同样的对象对象内容应该相等可是这==不是比的是引用么??这是什么原因?
就算是把"aaa"再次复值给S2也不应该2个引用相等吧???
理解透彻的兄弟帮忙说说谢了

解决方案 »

  1.   

    String 比较特殊,在没有new的情况下,值相同的话,句柄也相同.
      

  2.   

    嗯,用=“”形式赋值,就是值等内存位置也等。所以有结论说,String尽量使用=“”赋值,而不是new,前者省内存。
      

  3.   

    String s1 = “aaa”;
    String s2 = “aaa”;
    s1和s2引用的是同一个对象,即栈中的"aaa"
      

  4.   

    String是个特殊的东西,如果用
    String s1 = “aaa”;
    这种形式来得到一个String,那么会现在虚拟机中找是不是已经有这个实例