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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晴天_雨天 中级黑马   /  2014-3-12 09:33  /  895 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么{String s = new String("xyz");}创建了两个对象?其他类型的数据能这样创建吗,也是创建了两个对象吗?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 看看毕老师讲String的视频 有解释的.

查看全部评分

4 个回复

正序浏览
"xyz”是一个匿名对象,在创建的时候,它会在堆内存中开辟一个内存空间,但是只要使用到了new 它就会在堆内存中开辟一个内存空间,这个空间所对应的数据也是"xyz",匿名对象的那个内存空间它等待垃圾回收处理。而真正在使用的时候,是使用的new时开辟的那个内存空间。
回复 使用道具 举报
因为"xyz"就是一个字符串对象,然后new String()又创建了一个字符串对象。就等于2个。其中"xyz"对象是在常量池中的,而new出的String是在堆内存中的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
1、”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。
2、基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
因为“xyz” 本身就是一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马