java创建对象问题(第一个回答就给分) 请问大虾:MyClass c1,c2,c3;c1 = new MyClass();c3 = new MyClass();以上代码一共创建多少对象?不知道如何用代码去判断?hasCode()应该可以吧? 我觉得答案是3 正确吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是两个吧。如果你把MyClass类的Class对象也算上,那我还要说把加载那个类的ClassLoader对象也算上呢。嘿嘿。 怎么可能是 5 个,也不是 3 个。是两个,第一行只是声明了三个变量,实质就是三个变量指针,也就是说这三个变量只能指针 MyClass 的对象,目录,这三个变量暂时是空指针,未指向任何对象。而第二、三行,则通过 new 创建了两个对,让 c1、c2 不是空指针了。第一行代码,在内存分配情况如下:+------+| c1 |+------+| c2 |+------+| c3 |+------+第二、三行执行后,内存分布就变成下面这样的了:+------+ +---------+| c1 | -----> | MyClass |+------+ +---------+| c2 |+------+ +---------+| c3 | -----> | MyClass |+------+ +---------+ 。。ls连图都用上了。只有new MyClass();才是对象答案是2个 呵呵,我不是抬杠。面向对象观点中int也是对象,java不把它当作对象处理,并不代表它不是对象。 建立了3个引用,new了2个内存空间!我感觉是这样的,我也刚学。 是3个引用 2个对象.图很说明问题.在这里补充一下,三个引用是局部变量,所以存放在java数据区的栈区中,对象放在java数据区中的堆区中. String s = new String("xyz");创建了几个对象 比较基础,不过看过《Think in Java》的都知道是两个 引用是用来引用Java对象的。编译器的设计者有可能用面向对象的方式实现引用,但那完全是八竿子打不着的另一回事。编译器的设计者还完全有可能用面向对象的方式实现赋值运算符呢,难道也算对象? 2个,分析一下内存就很清楚了啊引用变量是存在栈内存中的,创建出来的实际的对象是存在堆内存中的开始声明的三个都是存在栈内存中,初始值都是为null,都没有指向实际的对象而后面通过new创建了两个对象,两个对象都是存在堆内存中,并且有相应的引用指向他所以实际创建的只有两个对象 求助:怎么把工具栏按钮在界面左边竖直排列? 【求助】jscrollpane显示不出来滚动轴 为什么JPanel无法浏览图片。。。 谁有Together6.0的注册码 能不能分享一下? java.lang包为什么不用继承,这是怎么实现的呢? 有熟悉SGIP开发的吗?看了些文档,我现在是一头雾水,没有思路!请高人指点,感激不进! 有人在用cni吗? 百思不得其解 如何把String强制转化为int类型??? 完了,applet算是没前途了 有没有免费使用的安装包制作工具啊 log = Logger.getLogger(this.getClass().getName());生成的文件名是什么?
如果你把MyClass类的Class对象也算上,那我还要说把加载那个类的ClassLoader对象也算上呢。嘿嘿。
+------+
| c1 |
+------+
| c2 |
+------+
| c3 |
+------+第二、三行执行后,内存分布就变成下面这样的了:
+------+ +---------+
| c1 | -----> | MyClass |
+------+ +---------+
| c2 |
+------+ +---------+
| c3 | -----> | MyClass |
+------+ +---------+
ls连图都用上了。
只有new MyClass();才是对象
答案是2个
图很说明问题.
在这里补充一下,三个引用是局部变量,所以存放在java数据区的栈区中,
对象放在java数据区中的堆区中.
编译器的设计者还完全有可能用面向对象的方式实现赋值运算符呢,难道也算对象?
引用变量是存在栈内存中的,创建出来的实际的对象是存在堆内存中的
开始声明的三个都是存在栈内存中,初始值都是为null,都没有指向实际的对象
而后面通过new创建了两个对象,两个对象都是存在堆内存中,并且有相应的引用指向他
所以实际创建的只有两个对象