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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 年轻的棒棒 中级黑马   /  2013-5-21 08:51  /  1300 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 年轻的棒棒 于 2013-5-21 14:49 编辑

String s = new String("xyz");创建了几个String Object

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

6 个回复

倒序浏览
创建了1个String Object。
String str1 = "hello";//好,堆内存是共享的。一个字符串就是一个String类的匿名对象。匿名对象就是已经开辟了堆内存空间的并可以直接使用的对象。当实例化多个对象时共用同一个堆内存。
String str2 = new String("hello");//不好,堆内存不是共享的。当实例化多个对象时分配多个堆内存。这样会造成内存的浪费。
所以以后可以用String str1 = "hello";代替String str2 = new String("hello");。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
只创建了一个String Object?String str1="hello",这个只创建一个我没有问题?
可是String str2 = new String("hello");这也只创建了一个?这两个不一样吧?
另外什么是堆内存的共享,请详细一点,我不是很清纯!
回复 使用道具 举报
年轻的棒棒 发表于 2013-5-21 10:24
只创建了一个String Object?String str1="hello",这个只创建一个我没有问题?
可是String str2 = new Stri ...

String str1="hello",这个调用了堆内存A;str1="world"重新赋值时,是在堆内存A中更改数据。
String str2 = new String("hello");这个调用了堆内存B;
String str3= new String("hello");这个调用了堆内存c;
回复 使用道具 举报
两个,一个是字符串字面量"xyz"所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是通过new String(String)创建并初始化的、内容与"xyz"相同的实例!
这个答案是其他地方的,可是我还是不理解,为什么?至于你说的一个我也很费解啊!
回复 使用道具 举报
本帖最后由 卢祥洲 于 2013-5-22 15:17 编辑
年轻的棒棒 发表于 2013-5-21 13:15
两个,一个是字符串字面量"xyz"所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是 ...

额,对,是2个,是我错了。“xyz”时就已经创建了一个对象,用new String("xyz")时又创建了另一个不同的对象。李兴华java基础里面有,讲的很详细。
回复 使用道具 举报
卢祥洲 发表于 2013-5-21 13:33
额,对,是2个,是我错了。“xyz”时就已经创建了一个对象,用new String("xyz")时又创建了另一个不同的 ...

“xyz”可以看成String str = "str",String s = new String("xyz"); 可以看成String s = new String(String str = "str";)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马