请问大虾:
MyClass c1,c2,c3;
c1 = new MyClass();
c3 = new MyClass();
以上代码一共创建多少对象?
不知道如何用代码去判断?hasCode()应该可以吧? 我觉得答案是3 正确吗?
------解决方案--------------------
应该是两个吧。
如果你把MyClass类的Class对象也算上,那我还要说把加载那个类的ClassLoader对象也算上呢。嘿嘿。
------解决方案--------------------
怎么可能是 5 个,也不是 3 个。
是两个,第一行只是声明了三个变量,实质就是三个变量指针,也就是说这三个变量只能指针 MyClass 的对象,目录,这三个变量暂时是空指针,未指向任何对象。而第二、三行,则通过 new 创建了两个对,让 c1、c2 不是空指针了。
第一行代码,在内存分配情况如下:
+------+
| c1 |
+------+
| c2 |
+------+
| c3 |
+------+
第二、三行执行后,内存分布就变成下面这样的了:
+------+ +---------+
| c1 | -----> | MyClass |
+------+ +---------+
| c2 |
+------+ +---------+
| c3 | -----> | MyClass |
+------+ +---------+
------解决方案--------------------
。。。。。。。。。。。。。。
ls连图都用上了。。。。。。。。。。。。。
只有new MyClass();才是对象
答案是2个
------解决方案--------------------
终于有人明白我为什么说是5个的了:)
------解决方案--------------------
建立了3个引用,new了2个内存空间!我感觉是这样的,我也刚学。
------解决方案--------------------
是3个引用 2个对象.
图很说明问题.
在这里补充一下,三个引用是局部变量,所以存放在java数据区的栈区中,
对象放在java数据区中的堆区中.
------解决方案--------------------
String s = new String( "xyz ");创建了几个对象
------解决方案--------------------
比较基础,不过看过《Think in Java》的都知道是两个
------解决方案--------------------
引用是用来引用Java对象的。
编译器的设计者有可能用面向对象的方式实现引用,但那完全是八竿子打不着的另一回事。
编译器的设计者还完全有可能用面向对象的方式实现赋值运算符呢,难道也算对象?
------解决方案--------------------
3个引用对象,两个实例对象,一共5个