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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 生牛排 中级黑马   /  2016-7-24 00:36  /  658 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String a=new String("b");创建了几个object对象啊

12 个回复

倒序浏览
生牛排 来自手机 中级黑马 2016-7-24 00:39:27
沙发
大神解救解救吧
回复 使用道具 举报
657324 来自手机 初级黑马 2016-7-24 00:53:19
藤椅
2个   一个常量  一个堆内存中也有
回复 使用道具 举报
生牛排 来自手机 中级黑马 2016-7-24 01:00:41
板凳
非常感谢
回复 使用道具 举报
3个  ,第一个是"b"在常量池有一个, new创建对象的时候在对内存,底层依耐StringBuffer 创建对象,利用append添加"b"的一个副本,因为StringBuffer和String不是同一个对象,所以StringBuffer要调用toString方法转换成String对象,所以是3个
回复 使用道具 举报
有用到StringBuffer吗?
回复 使用道具 举报
两个,一个“b”,存在于方法区常量池中,new String("b"),存在于堆内存中。可以理解为堆内存对象是方法区对象的拷贝。
回复 使用道具 举报
yuxing 中级黑马 2016-7-24 11:30:36
8#
自由人3738 发表于 2016-7-24 09:01
3个  ,第一个是"b"在常量池有一个, new创建对象的时候在对内存,底层依耐StringBuffer 创建对象,利用append ...

public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }

这个是对String类型的有参构造,哪来的StringBuffer~>\?
回复 使用道具 举报 1 0
两个0000000000000000000。。。。。。。。

点评

为什么是两个?  发表于 2016-7-24 14:09
回复 使用道具 举报
我不是说了底层吗
回复 使用道具 举报
两个,一个“b”,存在于方法区常量池中,new String("b"),存在于堆内存中。可以理解为堆内存对象是方法区对象的拷贝。好像是这样的
回复 使用道具 举报
String a = new String("b");  区别于  String a = "b";   视频上就讲了这个.   没看到创建多少Object类对象.问老师吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马