@Test
public void test() {
String str1=new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern()==str1);
String str2=new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern()==str2);
}
为什么最后输出的时候第二个是false,字符串常量池里的“java”字符串在intern()方法调用的时候为什么不是首次出现?
public void test() {
String str1=new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern()==str1);
String str2=new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern()==str2);
}
为什么最后输出的时候第二个是false,字符串常量池里的“java”字符串在intern()方法调用的时候为什么不是首次出现?
解决方案 »
- 为什么 导入substance6.0后运行官方实例报错请高手看看(5.2的没问题)
- 本人求jsp+javabean结构的分页代码,多谢了,只要给予代码,肯定给分,不给是小狗!
- 一有 package 就运行错误!求救啊,我想了一个下午了……
- 关于getSourceActions()
- 请问有一定编程基础,学习java开始要看些什么样的书籍亚?
- 一个初学者关于 布局管理器 和 awt控件的问题 求助
- 如何用JAVA写一个FTP的服务器端和客户端?
- java读取SFTP服务器上的大数据文件
- jbuilder7。0中import类抱错?
- 考大家一个问题:java函数调用是传值还是传引用。答对者有分。
- Java反射访问构造函数的一些问题,请大神详细说一下代码的逻辑,以及s和i,i2,i3的值都是怎么得出来的
- Java io流的问题
String s2 = new String("Hello");
String s3 = new String ("Hello").intern();这个答案是s1 = s3 ,s1 != s2
因为字面量"Hello"是编译期就确定好的,在类被加载时候就创建的,如果类加载时该字符串在常量池中已经有了,哪这一步就忽略了,堆中的对象是在运行期才确定的,在代码new的时候创建的.在一步理解就是 对于s3 在不调用intern()时候指向的是jvm在堆中创建的那个对象的引用,就和s2一样,但是执行了intern()后,指向的是字符串常量池中的那个字符串常量,也就是s1指向的那个字符串常量的引用 虽然不知道这么说可不可以看清楚 ,如果还是有什么疑问,欢迎交流
String str1=new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern()==str1); String str2=new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern()==str2);
String str3=new StringBuilder("计算机").append("软件").toString();
System.out.println(str3.intern()==str3);
System.out.println(str3.intern()==str1);