首页 > 其他 > 详细

String str=new String("123"); 究竟创建了几个对象

时间:2014-02-07 11:06:59      阅读:597      评论:0      收藏:0      [点我收藏+]
这是一道经典的笔试题:
String s=new String("abc");
String s1="abc";
String s2=new String("abc");
上段代码究竟产生了几个对象?
这涉及到JVM中String 的机制,当你new 一个String时,总会在堆中新建一个对象,然后String 引用指向这个对象,然后检查String pool(字符串池)中有没有和这个字符串内容一样的字符串,没有的话,将此字符串加入String pool。
当你用形如 String a = "abc",声明一个字符串时,jvm先检查串池里有没有 abc 这个字符串,有的话直接指向此字符串,没有的话在串池中增加这个字符串,然后指向它。
你可以试试 String a ="abc"; String b = "abc";   System.out.print(a == b)  输出true
此时,a 和 b都指向 串池中的 "abc"
而 String a = new ("abc"); String b = "abc";   System.out.print(a == b)  输出false 
此时,a指向堆中的"abc"对象,b指向串池中的"abc"对象
"=="比较的是两个引用变量所指向的是否是同一个对象,是的话则返回true,否则false

String str=new String("123"); 究竟创建了几个对象

原文:http://blog.csdn.net/hello_world_it/article/details/18953781

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!