java关于实例化对象的问题

今天遇到一个很神奇的问题代码如下

Student s;

就是这样一行代码,这行代码到底表面了什么?s到底是引用还是什么?
到底也没有生成对象。

15个回答

在java中,一切皆是对象。
Student s;
这句话的意思是申明了一个Student变量。因为Student是类类型,所以是引用类型的一种,所以是s是引用类型,存储在栈中,还没有申请内存空间,具体s的值是个错误的值,是个
任意的值,没有意义,直到new Student时,s的值才是申请的堆内存空间的地址,这个时候s的值才是有意义的

没有开辟内存空间,只是有一个空的句柄

楼上说得对,s只是个指针。

只有new的时候才开辟看见,把真实值在堆里面的地址赋值给s

定义变量 s 的类型为 Student,此时变量 s 并没有开辟内存空间,只是定义了指针,其值目前为 null

实例化有两种方法,其一是 将类型同为 Student 的值赋给 变量s;其二是new,即

s = (Student)object;
或者
s = new Student();

内存空间在new的时候会被开辟出来

这么写相当于
Student s = null;


Student s = new Student();
相当于
Student s;
s = new Student();

s是一个引用,它可以指向任何已经创建好的Student(或者它的派生类)的实例。
不用 = ,那么初始是null。好比int初始是0一样。
new Student();返回一个新的Student的对象实例(在没有变量接收以前它是匿名的),这个对象存储在堆上。
你甚至可以写
new Student().xxx();
调用xxx方法,也就是没有用任何变量接收它,单独成行,这个变量没有对应的饮用,而只是创建后被调用。

StackTc
StackTc 默认构造函数呢。
2 年多之前 回复
huangxiao
huangxiao 回复StackTc: 看对象的构造函数做了什么, 主要要看 Student 是怎么定义的
2 年多之前 回复
StackTc
StackTc 回复庄粟: 那student s; s里面存的是什么内容?
2 年多之前 回复
love877863099
哦丶是你 回复庄粟: 我也认为是这样
2 年多之前 回复
qq_27718453
庄粟 Student s = null; 不等于 Student s; 前者开了一块为null的空间,后者没有指向任何空间本身为null,使用(控制台输出)后者编译会报错,这是最好的证明。
2 年多之前 回复
StackTc
StackTc 应该会?
2 年多之前 回复
StackTc
StackTc 那s会存着一个 内存地址吗,应该不会吧?
2 年多之前 回复

该语句声明了一个Student类型的引用变量,其价值未知,直到有一个对象被真正创建和分配给他,只简单声明了一个引用变量而没有创建对象,与Student s = null效果一样

在栈内存中增加一个s变量,没有指向

在java中,一切皆是对象。
Student s;
这句话的意思是申明了一个Student变量。因为Student是类类型,所以是引用类型的一种,所以是s是引用类型,存储在栈中,还没有申请内存空间,具体s的值是个错误的值,是个
任意的值,没有意义,直到new Student时,s的值才是申请的堆内存空间的地址,这个时候s的值才是有意义的

共15条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐