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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 流沙 于 2014-5-16 10:12 编辑

我正在开基础视频!!!一维数组和二维数组都是引用数据类型;那为什么以为数组初始化默认是0,而二维默认初始化是null呢???????????????????????????????????????????????:'(:'(:'(

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很棒!有问题欢迎来论坛~

查看全部评分

16 个回复

倒序浏览
你有没有百度?
回复 使用道具 举报
因为二维数组中放的是一维数组,而一维数组本身就是引用数据类型,所以二维数组中默认初始化就是null了
回复 使用道具 举报

百了,没有这个提问啊
回复 使用道具 举报
都是0啊?我记得都是0
回复 使用道具 举报
暧緑荼 发表于 2014-5-15 18:34
都是0啊?我记得都是0

不是的 一个是0  一个是null
回复 使用道具 举报
  1. package com.inetaddress;

  2. public class Arrayfor {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 int [][] a = new int[3][3];
  8.                 for (int i = 0; i < 3; i++) {
  9.                         for (int j = 0; j < 3; j++) {
  10.                                 System.out.print(a[i][j]+",");
  11.                         }
  12.                 }
  13.                
  14.         }

  15. }
复制代码

结果是0,0,0,0,0,0,0,0,0,
回复 使用道具 举报
我个人是这样认为的
{
        public static void main(String[] args)
        {
                int[] arr =new int[3];
                System.out.println(arr[0]);
        }
       
}
//打印的是一维数组中0指标的元素值;默认的初始化值为0。
//例如一件教室,每位学生都有一个名字(这里就认为0是个名字),而叫0的这位学生就是要找的那位学生。
{
        public static void main(String[] args)
        {
                int[][] arr =new int[3][];
                System.out.println(arr[0]);
        }
       
}
//打印的是二维数组中0这个一维数组,而一维数组默认是null。
//例如一所学校里面有很多教室,而每间教室都有一个编号,而0编号的教室就是我们要找的那件教室,而不是找教室里的学生。
回复 使用道具 举报
一维数组中的元素的默认初始化值是0。
二维数组是一个包含多个一维数组的数组, 被包含的每个一维数组相当于这个二维数组的各个元素。
因为数组是定义在堆内存中的,所以这个二维数组的每一个元素都是相应一维数组的地址值,这些地址值的默认初始化值就是null

评分

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

查看全部评分

回复 使用道具 举报
亲,你定义的一位数组数据类型肯定是int类型的,int是基本数据类型初始值是0,如果定义的是引用数据类型则初始值是null。
回复 使用道具 举报
很简单嘛,因为二维数组里都是些对一维数组的引用,这些引用没被赋值当然是null了。。。。。也要看你这个二维数组是怎么来定义的
回复 使用道具 举报
stream 发表于 2014-5-16 11:16
很简单嘛,因为二维数组里都是些对一维数组的引用,这些引用没被赋值当然是null了。。。。。也要看你这个二 ...

哦哦是这个样子啊 还是不明白
回复 使用道具 举报
数组之所以有初始化值是因为数组被被定义后是一个实体,存放在对内存中,有默认初始化值。
例如:
     int[] arr=new int[5];其中arr就是一个引用变量,指向堆内存中的实体。而根据数量类型有不同的初始化值,楼主可以参考一下:
                    int--->0  double--->0.0 boolean--->false;  char----->'\u0000'
至于二维数组,可以理解成数组中的数组。
             Java中规定可以省略二维数组的长度,却不可以省略一维数组的长度。这是因为每个一维数组的初始化值为null,而二维数组的长度就是一维数组的个数因此可以省略。至于为什么为null,这是因为二维数组包含这一维数组,这是一个引用变量,所以为null了
    这是我的一些理解,希望能帮到楼主!!!

回复 使用道具 举报
因为一维数组的每个脚标存的都是元素,是具体的值,例如:int[] arr=new int[4],如果没有手动初始化,默认值就是0.而二维数组里面存的是一维数组,每一个脚标代表一个一维数组,即存在堆内存中,代表地址值,所以默认值为null。
回复 使用道具 举报
因为二维数组的元素是一维数组,而数组的默认值就是null
回复 使用道具 举报
因为二维数组的元素是一维数组,而数组的默认值就是null
回复 使用道具 举报
本帖最后由 zhanqq2010 于 2014-6-28 13:34 编辑
孟祥钰 发表于 2014-5-15 21:19
一维数组中的元素的默认初始化值是0。
二维数组是一个包含多个一维数组的数组, 被包含的每个一维数组相当 ...

不对啊,当类的成员数组初始化以后(此时不给他初始化真正的数据,只给他分配内存空间,那么java虚拟机会默认给数组赋值),是根据数据类型来决定他里面的内容的,         如下例子,当String类型时,不管是一维数组还是二位数组,值都为null,当int类型时,不管是一维数组还是二位数组,值都为0;如果是基本数据类型的话,他会初始化为基本数据类型默认的值(这个可以百度,这里我就不讲了),如果不是基本数据类型默认值应为null。
public class DomainClassTest02 {
        String arr[] = new String[3] ;            //一维数组,String类型
        String arr2[][]= new String[2][2];    //二维数组,String类型
        int arr3[] =new int[3];                       //一维数组,int 类型
        int arr4[][] = new int[2][2];              //二维数组,int 类型
        Integer arr5[] = new Integer[3];     //一维数组,Integer 类型
        Integer arr6[][] = new Integer[2][2];//二维数组,Integer 类型
       
        @Test
        public void test(){
                 System.out.println(arr[0]);              //输出null
                System.out.println(arr2[0][0]);       //输出null
                System.out.println(arr3[0]);            //输出0
                System.out.println(arr4[0][0]);       //输出0
                System.out.println(arr5[0]);            //输出null
                System.out.println(arr6[0][0]);       //输出null
        }

}

输出:
null
null
0
0
null
null

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