A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Aron 于 2014-5-23 17:57 编辑

变量声明而不赋值,和赋值为null区别是什么,赋值null实际上是初始化了?  在内存中的分配是怎么弄的啊?
遇到个小疑惑,麻烦解释下

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

14 个回复

倒序浏览
在内存中只有赋值了才能初始化变量
全局变量自动赋予初始值,局部变量必须手动赋值
不过最好还是全部都手动赋值,毕竟就算是自动赋值,赋的也是0或者null。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
我的理解是赋值为NULL等于提前给它分配了内存空间,就好比你声明你要去售楼处买房,但你没排号是一定买不到的,你要预约号最后就可以买到房。售楼处好比内存空间,预约好比赋值为NULL

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
gentleman 发表于 2014-5-23 15:03
在内存中只有赋值了才能初始化变量
全局变量自动赋予初始值,局部变量必须手动赋值
不过最好还是全部都手 ...

哦  有点明白了  但是内存空间如果赋值null  指向的是什么啊  分配内存没?
回复 使用道具 举报
BigKarel 发表于 2014-5-23 15:18
我的理解是赋值为NULL等于提前给它分配了内存空间,就好比你声明你要去售楼处买房,但你没排号是一定买不到 ...

那和如果直接赋值一个具体的内容 区别不大是不?
回复 使用道具 举报
Aron 发表于 2014-5-23 16:50
哦  有点明白了  但是内存空间如果赋值null  指向的是什么啊  分配内存没? ...

初始化了
回复 使用道具 举报
Aron 中级黑马 2014-5-23 17:56:40
7#

好滴 谢谢了
回复 使用道具 举报
学习了学习了
回复 使用道具 举报
String str;String是在常量池的,在栈内存开辟一个空间,一个内存单元,一个str变量的引用,String str=“ssss”,是在栈内存开辟以个空间,str的String类型的变量引用,指向了堆内存的一片空间,str值是ssss,(堆内存的常量池)String str2=null;也栈开辟个空间,引用指向了对内存,没有内容,其值是null,就是空的意思,比如说给你一袋水果,告诉你地址,去拿过来,你去拿的时候,发现袋子空空余也,就是null的意思,声明一个变量不赋值,就是买了什么一个品种水果和类型,苹果类,一个,还是一筐,可以理解为是数组类型,还是变量类型
int a;你朋友没有告诉你放在你里,但是你要为他准备一个空间,,相当于栈中开辟了变量a的一个单元,
在栈中有个好像叫变量表单,int,byte short  char  boolean float  的基本数据类型,一个变量是开辟以变量单元
long double是几本书类型,一个变量是开辟2个单元
回复 使用道具 举报
一个变量是开辟一个单元
long double是几本书类型,一个变量是开辟2个单元
。。。。写错啦,
回复 使用道具 举报
Aron 中级黑马 2014-6-11 21:50:12
11#
chenzhiyuan 发表于 2014-6-3 03:54
String str;String是在常量池的,在栈内存开辟一个空间,一个内存单元,一个str变量的引用,String str=“ ...

谢谢啦 明白了
回复 使用道具 举报
null在内存中有存放数据的空间,
回复 使用道具 举报
不赋值就没有,和赋值空也是一个值
回复 使用道具 举报
你没有赋值就是没有完成变量的初始化,内存是不会给你这个对象分配地址的,给一个变量赋值为null,在内存中会分配地址空间,只是没有值
回复 使用道具 举报
点赞点赞
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马