黑马程序员技术交流社区

标题: 问一个简单,但是又细致的问题。内存图的变化 [打印本页]

作者: xc29417412    时间: 2015-1-21 22:20
标题: 问一个简单,但是又细致的问题。内存图的变化
假设我已经有了主函数。有类:Newying,成员变量是int a=2;      在主函数实例化2对象 ,各位请看图
这里都是问题:大家请看

1.P1也是指向这个地址?还是P1在堆内存中还开辟一个新的存储空间?
  或者是它们2个对象同一个类公用的同一段内存是么?
2.或者是运行到输出语句时,是把内存的值调出来然后输出的
  如果是这样。那我++p.a是调出来再输出的?这样就和内存的他们没有关系了
  因为是调出来再使用和控制的?是么?




捕获.PNG (109.06 KB, 下载次数: 19)

内存图

内存图

作者: xc29417412    时间: 2015-1-22 19:52
竟然没人看?擦
作者: 家进    时间: 2015-1-23 12:08
问题看不懂,图看不懂,代码又不写上来。。嘎嘎。
作者: 默默地回忆    时间: 2015-1-23 21:56
还没有学到,看不懂啊:'(
作者: xc29417412    时间: 2015-1-23 23:58
家进 发表于 2015-1-23 12:08
问题看不懂,图看不懂,代码又不写上来。。嘎嘎。

不是啊。我的问题是这样的 new 同一个类,但是对象不同。 他们new出的堆空间里面是贮存在同一个位置么。还是分开的?假如第一个对象是 类名  p=new 类名() p就可以调用类名里面的东西了对吧。假如这个类有成员变量 int num=10;    那在主函数里面输入System.out.println(p.num++);是多少,在内存中的变化。
作者: 家进    时间: 2015-1-26 10:48
我这样和你说吧,只要是new出来的,不管是数组还是字符串或是对象,都是在堆内存里开辟一个新的存储空间。这个类的普通成员变量是归对象所有的,假如类中都有成员变量 int num=10;  两个对象都有不同的int num =10; 改变对象A不影响对象B 的值。  如果用static修饰的成员就不一样了,用static修饰的成员仅是类所有,多个对象共享的,这共享的东西很好理解,当一个对象改变共享的成员变量,另一个对象拿来用时当然已经变了样的。
作者: xc29417412    时间: 2015-1-26 19:36
家进 发表于 2015-1-26 10:48
我这样和你说吧,只要是new出来的,不管是数组还是字符串或是对象,都是在堆内存里开辟一个新的存储空间。 ...

大哥,成员变量怎么可能可以定义2个相同的成员?会报错的
作者: 秦文强    时间: 2015-1-26 21:45
这个还是看视频比较好
作者: qq306149769    时间: 2015-1-26 21:56
视频里有详细的讲到!
作者: 家进    时间: 2015-1-28 15:16
xc29417412 发表于 2015-1-26 19:36
大哥,成员变量怎么可能可以定义2个相同的成员?会报错的

不好意思, 《 假如类中都有成员变量 int num=10;》 这句话多打了一个“都”字。
作者: gezhizheng    时间: 2015-1-28 15:48
技术分怎么获得?
作者: xc29417412    时间: 2015-1-29 10:22
gezhizheng 发表于 2015-1-28 15:48
技术分怎么获得?

不用技术分,你去回帖,发帖5次有黑马比,拿去换就行。一个发帖2个黑马币




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