码迷,mamicode.com
首页 > 编程语言 > 详细

通过反编译深入理解Java String及intern

时间:2017-10-09 01:59:21      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:false   csdn   sdn   permgen   区别   perm   ring   app   details   

参考:

1,通过反编译深入理解Java String及intern

http://www.importnew.com/21024.html#comment-577875

2,Java8内存模型—永久代(PermGen)和元空间(Metaspace)

http://www.cnblogs.com/paddix/p/5309550.html

3,String 和 new String()的区别

http://blog.csdn.net/u012925323/article/details/46989201

常见面试题解答

有了对以上的知识的了解,我们现在再来看常见的面试或笔试题就很简单了:

Q:String s = new String(“xyz”),创建了几个String Object?

A:两个,常量池中的”xyz”和堆中对象。

Q:下列程序的输出结果:

String s1 = “abc”;
String s2 = “abc”;
System.out.println(s1 == s2);

A:true,均指向常量池中对象。

Q:下列程序的输出结果:

String s1 = new String(“abc”);
String s2 = new String(“abc”);
System.out.println(s1 == s2);

A:false,两个引用指向堆中的不同对象。

Q:下列程序的输出结果:

String s1 = “abc”;
String s2 = “a”;
String s3 = “bc”;
String s4 = s2 + s3;
System.out.println(s1 == s4);

A:false,因为s2+s3实际上是使用StringBuilder.append来完成,会生成不同的对象。

Q:下列程序的输出结果:

String s1 = “abc”;
final String s2 = “a”;
final String s3 = “bc”;
String s4 = s2 + s3;
System.out.println(s1 == s4);

A:true,因为final变量在编译后会直接替换成对应的值,所以实际上等于s4=”a”+”bc”,而这种情况下,编译器会直接合并为s4=”abc”,所以最终s1==s4。

Q:下列程序的输出结果:

String s = new String(“abc”);
String s1 = “abc”;
String s2 = new String(“abc”);

System.out.println(s == s1.intern());
System.out.println(s == s2.intern());
System.out.println(s1 == s2.intern());

A:false,false,true,具体原因参考(通过反编译深入理解Java String及intern)第二部分内容。

通过反编译深入理解Java String及intern

标签:false   csdn   sdn   permgen   区别   perm   ring   app   details   

原文地址:http://www.cnblogs.com/rrttp/p/7639273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!