请教一个基本的字符串赋值问题
如下代码
- 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";