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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

string s = new string("abc") ;  // 创建了几个对象?

Person p = new Person("abc");  // 创建了几个对象?

今天看到了这样一题,回答的也不全对,求解。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

9 个回复

倒序浏览
各两个对象 是吗
回复 使用道具 举报
string 字符串是创建两个对象
person 是创建的一个对象

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
都是两个对象,
string s = new string("abc") ;  和Person p = new Person("abc");  都是简写的,为了代码的整洁而这样写的。
其实代码分为两个部分,
第一步是声明对象,string s;和Person p;
第二步是初始化对象s= new string("abc") ;和 p = new Person("abc");
所以都是两个对象,这个是很久以前的理解,希望高手拍砖!

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
都是两个吧
string s = new string("abc") ;
"abc"   s
Person p = new Person("abc");
"abc"   p
不知道对不对
希望有高手详细解答。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
各位一个对象!!嘿嘿 向高手学习!
回复 使用道具 举报
刘豪 中级黑马 2012-5-29 16:46:36
7#
都是3个对象。
string s = new string("abc") ;    数据栈的s,new在托管堆产生一个,“abc”一个,共三个。
Person p = new Person("abc");  同上。


评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
第一个是三个对象,第二个是二个对象

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
刘豪 中级黑马 2012-5-29 18:42:07
9#
string s = new string("abc") ;
这里s是一个对象,在托管堆中new了一个对象,"abc"是一个对象,所以共3个对象。


Person p = new Person("abc");  
在这儿,p是一个Person类型的引用,不是对象,在托管堆中new了一个对象,"abc"是一个对象,所以共2个对象。

回复 使用道具 举报
可不可以这样理解
string 和Person都是一个类
均为引用类型,给一个引用类型赋值是将复制到一个对象的引用,对象还是同一个对象
声明时为局部引用类型,使用堆栈保存地址
new该对象时引用构造器在堆中创建一个新对象,然后初始化这个对象
p = new Person("abc");  
p = new Person("abc");
只是把新实例的地址赋值给引用

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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