黑马程序员技术交流社区

标题: 变量不赋值与赋null的区别 [打印本页]

作者: 北极£莜蓝    时间: 2014-6-7 23:40
标题: 变量不赋值与赋null的区别
基本数据类型不可以赋值null.引用数据类型不赋值与赋值null的区别是什么

作者: 北极£莜蓝    时间: 2014-6-7 23:58
====================不会放弃每一次提问的机会
作者: 何堂红    时间: 2014-6-8 00:20
本帖最后由 何堂红 于 2014-6-8 00:21 编辑

版主,我觉得答题之前,要向你解释几个基本概念:
基本数据类型:只有4类8种,即 整型:byte,short,int,long,(这四种类型的默认值都是0)浮点型:float,double.(它们的默认值为0.0);字符型:char(默认/u0000); 布尔型:boolean,(默认为false).
null:为空值,就是为空,不是任何值(不是0,也不是空格等等)。

那么,你觉得你能把空值null赋给一般变量吗?就比如说,你送你女朋友礼物,能送个空的给她吗?嘻嘻~

引用数据类型赋值null就是对引用数据类型的变量进行初始化,如果不赋值就是未初始化,变量只有初始化之后才能使用,这就是区别。不过有一点要注意,如果引用数据类型是存放于堆内存中的话,即使你没有给它赋值,jvm也会对其初始化,即赋值null.


这样解释,不知道你是否清楚了?

作者: 艮昕辶    时间: 2014-6-8 09:16
int x;
假设java虚拟机中0值在栈内存中的地址是0x1def
x就是这个地址的一个名字
int y=3;
java虚拟机会在栈内存中寻找到一个值为3的四字节的地址
y就是这个地址的名字

Object o=null;
表示s不指向任何堆内存地址地址
Object o=new Object();
java虚拟机会再堆内存中创建一个大小为sizeof(Object)的空间,并将地址赋值给o
o本质上是堆内存地址不是地址的名字
作者: zhaoxd1992    时间: 2014-6-8 10:40
  1. String str; //因为String默认nul,所以这是一个空引用
  2. String str = null; //这是一个空引用
  3. String str = ""; //str指向一个空字符
复制代码

作者: 北极£莜蓝    时间: 2014-6-8 21:53
何堂红 发表于 2014-6-8 00:20
版主,我觉得答题之前,要向你解释几个基本概念:
基本数据类型:只有4类8种,即 整型:byte,short,int,lon ...

引用数据类型包括类,接口数组.如  int [] arr = arr[6];   arr = null,//这个不是所谓的初始化吧,,,jvm在创建对象的时候会给堆中的成员变量默认初始化的,其中的一些引用数据如 String 默认初始化值就是null.但不能说赋值null就是对它进行初始化吧,  赋值null 理解为 空引用更合适点
作者: 闪耀.Q    时间: 2014-6-8 22:15
我的浅浅的理解哈~~引用数据类型不赋值,就是只定义,而没有初始化,变量没有指向内存地址?引用数据类型赋值null,是初始化了,但是初始化的内存地址是空,还是变量没有指向内存地址。。貌似就是有没有初始化的区别吧、、自己理解,大神勿喷。。
作者: 何堂红    时间: 2014-6-8 22:39
北极£莜蓝 发表于 2014-6-8 21:53
引用数据类型包括类,接口数组.如  int [] arr = arr[6];   arr = null,//这个不是所谓的初始化吧,,,jvm在 ...

其实也是一个初始化,不过引用这个初始化没什么意义而已。当然,按你的理解也行。




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