黑马程序员技术交流社区

标题: string s = new string("abc") ; // 创建了几个对象? Person p = new Person( [打印本页]

作者: 错,谁的错丶    时间: 2012-5-29 11:04
标题: string s = new string("abc") ; // 创建了几个对象? Person p = new Person(
string s = new string("abc") ;  // 创建了几个对象?

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

今天看到了这样一题,回答的也不全对,求解。
作者: 错,谁的错丶    时间: 2012-5-29 11:05
各两个对象 是吗
作者: 蒋春    时间: 2012-5-29 11:45
string 字符串是创建两个对象
person 是创建的一个对象
作者: 朱亮辉    时间: 2012-5-29 12:11
都是两个对象,
string s = new string("abc") ;  和Person p = new Person("abc");  都是简写的,为了代码的整洁而这样写的。
其实代码分为两个部分,
第一步是声明对象,string s;和Person p;
第二步是初始化对象s= new string("abc") ;和 p = new Person("abc");
所以都是两个对象,这个是很久以前的理解,希望高手拍砖!


作者: 牛景亮    时间: 2012-5-29 12:39
都是两个吧
string s = new string("abc") ;
"abc"   s
Person p = new Person("abc");
"abc"   p
不知道对不对
希望有高手详细解答。
作者: G_Xiaotao    时间: 2012-5-29 13:35
各位一个对象!!嘿嘿 向高手学习!
作者: 刘豪    时间: 2012-5-29 16:46
都是3个对象。
string s = new string("abc") ;    数据栈的s,new在托管堆产生一个,“abc”一个,共三个。
Person p = new Person("abc");  同上。



作者: 聂玉林    时间: 2012-5-29 17:16
第一个是三个对象,第二个是二个对象
作者: 刘豪    时间: 2012-5-29 18:42
string s = new string("abc") ;
这里s是一个对象,在托管堆中new了一个对象,"abc"是一个对象,所以共3个对象。


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


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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2