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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qincai 中级黑马   /  2014-6-13 23:55  /  998 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qincai 于 2014-6-14 09:32 编辑

String s=new String ("abc");
为什么产生了两个对象?

10 个回复

倒序浏览
abc一个、s一个,这个回答好像有点水,哈哈,首先建了一个“abc”的字符串,然后建立了一个s引用对象指向“abc”,所以是两个对象。{:3_49:}
回复 使用道具 举报
☆枫の云 发表于 2014-6-13 23:58
abc一个、s一个,这个回答好像有点水,哈哈,首先建了一个“abc”的字符串,然后建立了一个s引用对象指向“ ...

s不是个对象吧,s是个引用数据类型的变量
回复 使用道具 举报
因为字符串本身是一个对象,new String() 的时候会去常量池中去找“abc”对象,如果有的话,获得“abc”对象的地址,如果没有,就会在常量池中新建一个“abc”对象,把内存地址赋给new String(),而new String()本身也是一个对象,所以是两个对象
回复 使用道具 举报
qincai 发表于 2014-6-14 00:01
s不是个对象吧,s是个引用数据类型的变量

额,确实弄错了,我在网上看了看:
String有个构造器,返回的是String对象;“abc”本身是一个String对象,构造出来的是这个String对象的副本。
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

这样看应该是有两个字符串对象。
回复 使用道具 举报
对象1,"abc"
对象2,new String ("abc");
回复 使用道具 举报
alive 发表于 2014-6-14 00:04
因为字符串本身是一个对象,new String() 的时候会去常量池中去找“abc”对象,如果有的话,获得“abc” ...

赞同  我也是这样认为的
回复 使用道具 举报
☆枫の云 发表于 2014-6-14 00:09
额,确实弄错了,我在网上看了看:
String有个构造器,返回的是String对象;“abc”本身是一个String对象 ...

厉害!!!!!
回复 使用道具 举报
首先new String(“abc”)这就表示在内存中开辟了一个空间,用s指向了该内存空间,这是一个对象,
其次字符串“abc”自身也是一个对象,该对象存放在字符串缓冲区中
回复 使用道具 举报
都是大神啊
回复 使用道具 举报
Aron 中级黑马 2014-6-17 22:11:20
11#
学习了啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马