A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 16463535 中级黑马   /  2013-4-18 13:33  /  1199 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = new String("abc");创建了几个String Object?
正确应该是两个。
不理解,求解释。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

2 个回复

倒序浏览
String s = new String("abc"); 其中字符串“abc” 一个存储在 常量池中  一个放在 对内存中
如果是 String s = "abc";的话则是一个 直接引用在常量池中的字符串
还有这个可以百度吧

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报

String s = new String("abc")

我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。
String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;
=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;
最后,new String("abc")看成"abc"和new String();
1.new String()创建了一个对象
2."abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。要是你前面没有出现这种用" "双引号格式创建“abc”字符串对象的话,那么就有两个对象,要是之前创建了,那么这里就只创建一个对象,"abc"就从字符串常量池中取出来。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马