为了账号安全,请及时绑定邮箱和手机立即绑定

初始化变量就是为这个变量 分配内存,这句话对不?

初始化变量就是为这个变量 分配内存,这句话对不?

人到中年有点甜 2019-03-12 17:15:34
Java程序中的引用变量并不需要进行所谓的初始化操作,需要进行的是引用变量所引用的对象。
查看完整描述

7 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

初始化变量分:

  1. 声明变量

  2. 给变量赋值

分配内存也分:

  • 分配堆里的内存

  • 分配栈里的内存

所以呢,这个问题比较泛。
首先来个栗子:

int a;//分配jvm中的栈内存,形成一个引用
a = 1;//分配jvm中的堆内存

再举个栗子:

String str = new String(“hello”);
  • str 这个引用放在栈上

  • new 创建出来的对象实例放在堆上

  • “hello”这个字面量放在静态存储区

继续上面的栗子:

String str1 = str;//此时,str1也是一个引用,放在栈上。指向堆里的hello

想了解更多,可以看看我的一篇专栏文章。开头简单的讲到了 Java Memory Model。


查看完整回答
反对 回复 2019-04-20
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

不对。
int i; //此时以为变量i分配空间,i有值
i=1; //赋值

初始化只是为这个变量赋予有意义的值。


查看完整回答
反对 回复 2019-04-20
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

初始化变量就是为这个变量 分配内存,这句话对不?

至少在 C++ 中是不对的。

根据我的理解,在 C++ 中,一个变量要使用,一般需要以下三步:

  1. 声明 declaration
    “声明”可以引入变量所使用的标识符,但不会分配内存空间。比如extern int i;,表示i这个标识符在之后的程序中是一个整数。

  2. 定义 definition
    “定义”除了同声明一样引入变量所使用的标识符外,还会根据变量的类型分配相应的空间,但不会初始化(更准确的说,是会进行“默认初始化”,见下文)。比如int i;,就定义了一个整型变量i并为其分配了空间。

  3. 初始化 initialization
    “初始化”是指在定义变量时,为其赋值。比如int i = 1;,就定义了一个整型变量i并为其分配了空间,而且把它的值设为 1。


关于上文“默认初始化”的一点解释:

“默认初始化”(default initialization)简单来说是这样一个过程,当使用T x;定义变量时,如果T是一个类,就调用这个类的默认构造函数来初始化x,如果T是一个内置类型(built-in type),则不进行初始化。更具体的可以参照 C++ 标准中的规定。


查看完整回答
反对 回复 2019-04-20
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

在Java中也不对,
Object o;//这个也是会分配内存,分配o这个对象的内存,
o = new Object(); //初始化,引用的对象


查看完整回答
反对 回复 2019-04-20
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

不全对,C++对象的static就不会先分配内存


查看完整回答
反对 回复 2019-04-20
?
皈依舞

TA贡献1851条经验 获得超3个赞

不对
一般给变量分配空间是在变量定义的时候,而初始化是给这块空间赋初值,并不是必须的,两者不等价

查看完整回答
反对 回复 2019-04-20
?
哔哔one

TA贡献1854条经验 获得超8个赞

不正确,通俗来说,初始化变量只是让这个变量有意义,有意义就可以就行相关操作


查看完整回答
反对 回复 2019-04-20
  • 7 回答
  • 0 关注
  • 892 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号