请教一个基本的字符串赋值问题
如下代码
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的缓存池中查找是否已有此对象
------解决方案--------------------
------解决方案-------------------- 在java里面,由于String被大量的使用,所以对它在内存有一个专门的String Pool,对于用
String str1 = "abc";
这种,会先在栈中建立一个String类型的引用,然后到池中查找是否有“abc”,如果存在,之间将之
前的引用指向该对象,如果不存在,创建一个“abc”放到池中,之后再将引用指向它。所以在你的示例
中
Java code
String str1 = "ABC";
String str2 = "ABC";