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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极£莜蓝 中级黑马   /  2014-6-7 23:40  /  5077 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基本数据类型不可以赋值null.引用数据类型不赋值与赋值null的区别是什么

7 个回复

倒序浏览
====================不会放弃每一次提问的机会
回复 使用道具 举报
本帖最后由 何堂红 于 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.


这样解释,不知道你是否清楚了?
回复 使用道具 举报
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本质上是堆内存地址不是地址的名字
回复 使用道具 举报
  1. String str; //因为String默认nul,所以这是一个空引用
  2. String str = null; //这是一个空引用
  3. String str = ""; //str指向一个空字符
复制代码
回复 使用道具 举报
何堂红 发表于 2014-6-8 00:20
版主,我觉得答题之前,要向你解释几个基本概念:
基本数据类型:只有4类8种,即 整型:byte,short,int,lon ...

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

其实也是一个初始化,不过引用这个初始化没什么意义而已。当然,按你的理解也行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马