黑马程序员技术交流社区

标题: 关于数组的长度和赋值问题 [打印本页]

作者: yan    时间: 2013-8-4 22:07
标题: 关于数组的长度和赋值问题

class Demo
{
        public static void main(String [] args)
                {

                  int [] arr = new int[3];
               
                        System.out.println(arr[0]);
               
                }
       
}
这个程序输出的是0,数组可以赋值为0
class Demo
{
        public static void main(String [] args)
                {

                  int [] arr = new int[3]{};
               
                        System.out.println(arr[0]);
               
                }
       
}
这个却无法通过编译,按照我的理解里面的值应该也为0才对啊,为什么还要给大括号里面赋和数组长度一样的值呢?
写成int [] arr =new int [3]{2,3}不可以吗?求解答
作者: 柳小龙    时间: 2013-8-4 22:50
亲,大家可能都是受C语言的影响了,我记得C语言中new int[3]{2,3}是可以这样做的,如果不指定维数3,是根据后面大括号{}里面初始化内容的个数决定维数的;如果指定了维数,后面大括号{}里面的的元素个数不够时,后面int型数组的话默认都是零 。   但在Java中有区别,new int[维数]{初始化值}中,如果指定了维数,就不用指定初始化值;如果指定了初始化值就不用指定维数,所以int [] arr =new int [3]{2,3}的却是不可以的。。。
作者: lijia113    时间: 2013-8-6 21:04
因为你使用了java数组定义的静态定义数组,你在定义的时候就必须的赋值啊。
如果是动态的话,没有赋值是可以的,因为没有赋值的角标会默认赋值为0.
像 int[] arr=new int[3];  arr[0]=2;arr[2]=1;这样是可以通过编译的
作者: 肖博    时间: 2013-8-7 14:54
new int [3]   这个3 代表的是数组的长度,你长度既然定义了,内容只有两个 程序无法编译通过
作者: 天涯海角    时间: 2013-8-7 15:43
在int[] arr=new int[3]{2,3}中,[]中的3代表数组中元素的个数,{}中代表数组中的元素,在这个表达式中数组元素的个数与数组中的元素不相符所以编译不通过。
作者: EYE_SEE_YOU    时间: 2013-8-8 19:03
我试了一下,就算{}里数据与数组长度一样也不行
int [] arr = new int[3]{1,2,3};
这是非法语句,编译器要求在int [3]后面要分号
我想java定义数组的格式只有两种是合法的
第一种
int [] arr = new int [length];
直接从堆内存开辟一块空间给定义了长度的数组
这种先定义后赋值
第二种
int [] arr = {1,2,3};
这种定义、赋值、长度都直接用一条代码搞定

作者: oath    时间: 2013-8-8 20:28
EYE_SEE_YOU 发表于 2013-8-8 19:03
我试了一下,就算{}里数据与数组长度一样也不行
int [] arr = new int[3]{1,2,3};
这是非法语句,编译器要 ...


int[ ] arr={1,2,3};和int[ ] arr = new int[ ]{1,2,3};是一样的

int[ ] arr = new int[3];

初始化和维表达式只有一个就OK




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