首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 数组定义为{}与null 有区别吗
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 09:59:56 楼主
    数组定义为{}与null  有区别吗
    10  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 10:01:481楼 得分:0
    {}:分配内存空间;
    null : 不分配内在空间。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anqini
    • 等级:
    发表于:2008-04-28 10:05:022楼 得分:0
    引用楼主 aplesky2008 的帖子:
    数组定义为{}与null  有区别吗

    {}意思是已经分配一个空间,就是说实例化了,null  没有实例化,不指向任何对象,没分配空间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 10:06:073楼 得分:0
    应该没有什么区别
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 10:06:234楼 得分:0
    引用 1 楼 lvzhu18 的回复:
    {}:分配内存空间;
    null : 不分配内在空间。


    对,{}这个是分配了空间的,引用指向了内存的一段空间,而赋值为null的话,引用就没有指向内存空间,没有分配空间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Focus
    • 等级:
    发表于:2008-04-28 10:29:235楼 得分:0
    有区别的
    确实{}分配了空间
    起码是对数组这个对象本身分配了
    null没有分配
    只是定义了一个符号罢了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 10:59:006楼 得分:0
    int []x={};
    System.out.println(x==null);//false
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 11:20:497楼 得分:0
    数组定义为{} 给它分配了一个内存空间
    但是数组定义位 null的话 则只是 定义了一个指针
    内存分为堆和笺碱 嘛
    指针只存在于堆中 而不存在于 笺
    堆中用于存放指针  笺中用于存放值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenhongxin
    • 等级:
    发表于:2008-04-28 11:22:108楼 得分:0
    有区别的
    确实{}分配了空间
    起码是对数组这个对象本身分配了
    null没有分配
    只是定义了一个符号罢了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 11:44:229楼 得分:0
    有区别的 
    确实{}分配了空间 
    起码是对数组这个对象本身分配了 
    null没有分配 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 11:49:1510楼 得分:0
    有区别吧.分配没分配内存这点就区别大了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 12:10:2911楼 得分:0
    {}:给数组分配了内存空间,但是这个数组是空的,没有任何元素;
    null : 不分配内在空间,只是声明了一个可以指向数组的引用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 12:12:1212楼 得分:0
    引用 2 楼 anqini 的回复:
    {}意思是已经分配一个空间,就是说实例化了,null  没有实例化,不指向任何对象,没分配空间

    请参看我的示例代码
    Java code
    //:TestArray.java public class TestArray { public static void main(String[] args) { int[] a = {}; int[] b = null; try { System.out.println("{ }分配内存\ta.length="+a.length); } catch(Exception e) { System.out.println("{ }没有分配内存"); } finally { try { System.out.println("null分配内存\tb.length="+b.length); } catch(Exception e) { System.out.println("null没有分配内存"); } } } }

    运行结果为:
    { }分配内存      a.length=0
    null没有分配内存
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 13:47:0413楼 得分:0
    怎么说没区别?区别大了!一个是数组,一个是null!
    int[] arr = { };
    对它做范围内遍历,不可能抛出异常,而如果
    int[] arr = null;
    异常就抛出来了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 14:26:2814楼 得分:0
    引用 1 楼 lvzhu18 的回复:
    {}:分配内存空间;
    null : 不分配内在空间。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 14:37:3715楼 得分:0
    Integer i = null;
    Integer i = 0;

    有区别吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 14:49:5616楼 得分:0
    int[] arr = { };  给了你遥控器,也给了电视你
            ¦      ¦
        遥控器  电视

    int[] arr = null; 给了你遥控器,没有给电视你
            ¦       
        遥控器


    总结:你连电视都没有,你拿“遥控器”是没有用的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 15:36:1417楼 得分:0
    是有区别的,一个已经实例化了一个数组,而另一个没有实例化,对null数组求长度会抛出空指针异常的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 16:03:0018楼 得分:0
    null时不分配内在空间,只是声明了一个可以指向数组的引用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 16:17:4219楼 得分:0
    不错的知识点。 mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lgg201
    • 等级:
    发表于:2008-04-28 16:45:5420楼 得分:0
    有的吧。
    内存?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 16:53:2621楼 得分:0
    有区别,{}有分配地址,null没有分配。
    你可以试试就看到结果了,如 String []aa={"a","b","c"};
          String []bb=null;
          int i= aa.length;
          int j =bb.length;
    编译应该没问题,你运行看看呢。多动手就发现了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 16:53:4622楼 得分:0
    引用楼主 aplesky2008 的帖子:
    数组定义为{}与null  有区别吗

    int[] array1 = null;
    只是在栈中声明了一个引用.堆中并未分配内存空间.
    int[] array2 = {};
    在栈中声明了一个引用.堆中并分配内存空间,但是并未存放具体内容.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 21:49:0823楼 得分:0
    {}意思是已经分配一个空间,就是说实例化了,null  没有实例化,不指向任何对象,没分配空间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 21:59:2924楼 得分:0
    引用 2 楼 anqini 的回复:
    引用楼主 aplesky2008 的帖子:
    数组定义为{}与null  有区别吗

    {}意思是已经分配一个空间,就是说实例化了,null  没有实例化,不指向任何对象,没分配空间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 22:02:1125楼 得分:0
    数组乃引用也。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-28 22:09:4726楼 得分:0
    int[] x = {};
    int[] y = null;
    System.out.println("x.length=" + x.length);//x.length=0
    System.out.println("y.length=" + y.length);// 抛出java.lang.NullPointerException
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 00:31:5927楼 得分:0
    引用 12 楼 Coder211 的回复:
    引用 2 楼 anqini 的回复:
    {}意思是已经分配一个空间,就是说实例化了,null  没有实例化,不指向任何对象,没分配空间 

    请参看我的示例代码

    Java code//:TestArray.java
    public class TestArray {
        public static void main(String[] args) {
            int[] a = {};
            int[] b = null;
            try {
                System.out.println("{ }分配内存\ta.length="+a.length);
            } catch(Exception e) …
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 09:45:5128楼 得分:0
    来晚了!顶2搂。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 10:28:5029楼 得分:0
    前面各位说得很清楚了,不再多说。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • KingNE
    • 等级:
    发表于:2008-04-29 10:48:2630楼 得分:0
    {}:分配内存空间有指向得引用
    null : 不分配内在空间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-29 11:02:2031楼 得分:0
    学习了~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-30 05:06:4732楼 得分:0
    该回复于2008-05-01 06:22:47被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-30 08:33:3533楼 得分:0
    引用 16 楼 junjunweiwei 的回复:
    int[] arr = { };  给了你遥控器,也给了电视你
            ¦      ¦
        遥控器  电视

    int[] arr = null; 给了你遥控器,没有给电视你
            ¦       
        遥控器


    总结:你连电视都没有,你拿“遥控器”是没有用的 

    好精彩的比喻
    哈哈
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved