问题的抛出:
对于String s= new String(“aaa”);
s.intern();
上面两行在java 内存运行规律时怎么样的?
1、在JDK 6
首先第一行命令会在堆内存的中创建字符串“aaa”;
并让s指向该内存的地址引用。
然后对于s.intern() 的命令,首先会在字符串常量池中寻找是否有“aaa”的对象,如果有则返回在字符串常量池中的对象引用,否则,会在该对象添加到字符串常量池中,并返回在常量池中的引用。
2、在JDK 7以上
同样首先第一行命令会在堆内存的中创建字符串“aaa”;
并让s指向该内存的地址引用。
然后对于s.intern() 的命令,在字符串常量池中寻找是否有“aaa”的对象,如果有则返回在字符串常量池中的对象引用,否则,会在该对象拷贝到字符串常量池中,其引用的地址和在堆内存中“aaa”对象所引用的地址是一致的,所以返回的地址跟之前的一样。
即如果我们令: s2=“aaa”;
判断: s==s2, 其返回的就是true;