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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张学永 高级黑马   /  2012-11-13 14:43  /  2285 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张学永 于 2012-11-13 18:35 编辑

判断数组是否为空,我在网上看到的大部分结果是
if(arr==null || arr.length==0)
想问一下这个条件和直接写成
if(arr==null)有什么区别么?为什么还要判断数组长度是否为0呢?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

8 个回复

正序浏览
所说的数组为空指两方面的:
1:数组是否实例化。
2:数组元素个数是否为空,也就是arr.length==0
如果只是if(arr==null)的话,只会判断数组是否实例化,也就是是否只想了内存的一个地址。
if(arr==null || arr.length==0)的话,先判断数组是否实例化,实例化了再判断数组长度是否为0;如果没有实例化,后面的就不判断了。
回复 使用道具 举报
张综 中级黑马 2012-11-13 22:35:14
8#
如果数组初始化了。那么打印的虽然是null值,但是这不是说数组是空的,而是数组有值,值是null。这时候就需要判断有没有初始化。所以用arr=null。第二种就是判断数组长度了,也就是初始化了数组,但是数组长度为零。两种都满足你说的判断数组是否为空。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
高任 中级黑马 2012-11-13 18:46:55
7#
if(arr==null || arr.length==0)两种情况只要有一种出现就符合条件,“||”是“或”,当然具体要结合程序情况 int[] arr=new int[4] 是创建了一个新数组有四个数组元素并随着类的加载初始化并在堆内存中开辟空间;然后为每个数组元素赋值为null,然后等着对象调用并赋值,我也是刚自学了数组,我是这样认为的,不知道对不对。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 鼓励一下 。

查看全部评分

回复 使用道具 举报
颜峰 发表于 2012-11-13 15:06
两种情况啊,第一种是只声明了数组,没有初始化,int[] arr;第二种就是初始化了数组,但数组中没有元素arr ...

也就是说第一种是为null
第二种是不为null,但长度为0?
回复 使用道具 举报
两种情况啊,第一种是只声明了数组,没有初始化,int[] arr;第二种就是初始化了数组,但数组中没有元素arr = {};这两种情况数组都无法使用,所以要分别判断

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
张学永 发表于 2012-11-13 14:53
如果定义了一个数组int[] arr = new int [4];那么该数组arr==null吗?arr[0]不是为0么?没有初始化就说明 ...

只要这个数组被定义了,里面就算没有元素,也不==null,你可以写下代码试下,是不为null的
回复 使用道具 举报
黑马_宋超 发表于 2012-11-13 14:50
判断arr是否为null是判断这个数组是否初始化,如果只判断arr是否为null,那么如果数组初始化了,但是里面为nul ...

如果定义了一个数组int[] arr = new int [4];那么该数组arr==null吗?arr[0]不是为0么?没有初始化就说明该数组为null吗?
回复 使用道具 举报
判断arr是否为null是判断这个数组是否初始化,如果只判断arr是否为null,那么如果数组初始化了,但是里面为null,那么此时数组应该不为null,所以需要先判断数组是否已经初始化,然后判断数组的长度是否为0

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 应该把语言组织好回答

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马