public class Test { public static void main(String[] args) { String s1 = new String("abc"); String s2 = s1.intern(); System.out.println(s1==s2);这里为什么输出false String s3 = "123"; String s4 = s3.intern(); System.out.println(s3==s4); } }
문자열 상수 풀에 "abc"가 없습니다. 결과가 false 및 true 아래로 출력되는 이유는 무엇입니까? - PHP 중국어 웹사이트 Q&A - 문자열 상수 풀에 "abc"가 없고 false 및 true 아래에 결과가 출력되는 이유는 무엇입니까? ? - PHP 중국어 웹사이트 Q&A
와서 보고 배워보세요.
String s1 = new String("abc"); 生成了常量池中的“adc” 和堆空间中的字符串对象。
String s2 = s1.intern(); 这一行的作用是s1对象去常量池中寻找后发现"abc"已经存在于常量池中了。 然后生成一个s2的引用指向常量池中的“abc”对象。
结果就是 s1 和 s2 的引用地址明显不同。因此返回了false。
String s3 = "123"; 这一行代码会直接去常量池中创建
String s4 = s3.intern(); 发现"123"已经在常量池存在 直接引用指向常量池“123”对象
结果就是s3 和s4 的引用地址相同 返回true
不过jdk1.6 和1.7 有点不同 建议去看看api 或者百度下
문자열 상수 풀에 "abc"가 없습니다. 결과가 false 및 true 아래로 출력되는 이유는 무엇입니까? - PHP 중국어 웹사이트 Q&A - 문자열 상수 풀에 "abc"가 없고 false 및 true 아래에 결과가 출력되는 이유는 무엇입니까? ? - PHP 중국어 웹사이트 Q&A
와서 보고 배워보세요.
String s1 = new String("abc"); 生成了常量池中的“adc” 和堆空间中的字符串对象。
String s2 = s1.intern(); 这一行的作用是s1对象去常量池中寻找后发现"abc"已经存在于常量池中了。 然后生成一个s2的引用指向常量池中的“abc”对象。
结果就是 s1 和 s2 的引用地址明显不同。因此返回了false。
String s3 = "123"; 这一行代码会直接去常量池中创建
String s4 = s3.intern(); 发现"123"已经在常量池存在 直接引用指向常量池“123”对象
结果就是s3 和s4 的引用地址相同 返回true
不过jdk1.6 和1.7 有点不同 建议去看看api 或者百度下