2 qq 39632416 qq_39632416 于 2017.09.09 11:09 提问

当创建一个对象的时候

就像这样 Person p1;注意这里没有用new,这样创建的时候堆空间有这个对象的位置吗?,这个p1又指向那个位置呢 可以用set方法给成员变量赋值吗?如果能赋值说明堆空间有分配空间,可是他也没有用构造方法,堆空间怎么会开辟一个空间给这个对象?

5个回答

qq_36687479
qq_36687479   2017.09.09 11:28

这个只是在栈中申明了一个对象名,堆里面并没有申明内存空间,p1也没有指向任何地方,不能用set给他赋值。

qq_36687479
qq_36687479 回复qq_39632416: 有区别,指向空是堆里申明了内存空间,不赋值就没有申明内存空间
大约 2 个月之前 回复
qq_39632416
qq_39632416 如果指向空呢,和不符值有区别嘛
2 个月之前 回复
qq_33727653
qq_33727653   2017.09.09 12:13

在我的理解中 Person p1 仅仅是对象的声明,是对对象的引用。仅仅是在栈中,在堆里还没有空间。当然可以用set给他赋值,赋值的时候是把堆中已经创建好的对象地址引给了p1,也就是pi指向(代表了)你所赋值的那个对象。楼主‘如果能赋值说明堆空间有分配空间’这是不对的,堆开辟的空间是给的是你set操作的时候所赋值的那个对象,你在赋值的时候说明那个对象已经存在了,与p1并没有必然联系,而你的set方法是让他们联系在一起而已。!!!

qq_33727653
qq_33727653 我说的是SETPerson 不是SET Person 里面的变量 ,我的错,没细看楼主的问题!!主要是就着第一个问题!
2 个月之前 回复
github_40153370
github_40153370 调用set方法给成员变量设置,应该报空指针异常吧
2 个月之前 回复
qq_36687479
qq_36687479 兄弟,你“是对对象的引用”这句话说错了,此时还没有任何引用操作呢,set也是不能赋值的,片
2 个月之前 回复
longlong3207
longlong3207   2017.09.09 12:15

对象只有真正实例化后才会在内存中给他开辟存储空间,就像你那样写的话,p1没有指向任何地址,那么它不可以操作对象的成员

qq_39632416
qq_39632416 我要是这么写有什么区别吗p1=null和不赋任何值
2 个月之前 回复
cd420928908
cd420928908   2017.09.09 12:33

这中实在栈内存中声明一个对象没,没创建堆内存,又没指向,当然没位置的,

u010105757
u010105757   2017.09.09 16:45

建议楼主了解一下jvm的工作原理,最基础的东西喽

qq_39632416
qq_39632416 我挺喜欢底层的东西的,只是书本看起来有点看不懂,太官方了
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片