日期:2014-05-20  浏览次数:20692 次

请教一个基本的字符串赋值问题
如下代码
Java code

    public static void main(String[] args) {
        String str1="ABC";
        String str2="ABC";
        String str3=new String("ABC");
        System.out.println(str1==str2);
        System.out.println(str3==str1);
    }


输出
1: true
2: false
第二行结果是显而易见的
但为什么第一行是true啊,想请教一下字符串赋值的内部实现具体是怎样的

------解决方案--------------------
这是一个很经典的问题,new 出来一定是新的, 但是赋值则会先到string的缓存池中查找是否已有此对象
------解决方案--------------------
探讨
这是一个很经典的问题,new 出来一定是新的, 但是赋值则会先到string的缓存池中查找是否已有此对象

------解决方案--------------------
在java里面,由于String被大量的使用,所以对它在内存有一个专门的String Pool,对于用
String str1 = "abc";
这种,会先在栈中建立一个String类型的引用,然后到池中查找是否有“abc”,如果存在,之间将之
前的引用指向该对象,如果不存在,创建一个“abc”放到池中,之后再将引用指向它。所以在你的示例
Java code

             String str1 = "ABC";
             String str2 = "ABC";