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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yan 中级黑马   /  2013-8-4 22:07  /  3227 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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}不可以吗?求解答

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
亲,大家可能都是受C语言的影响了,我记得C语言中new int[3]{2,3}是可以这样做的,如果不指定维数3,是根据后面大括号{}里面初始化内容的个数决定维数的;如果指定了维数,后面大括号{}里面的的元素个数不够时,后面int型数组的话默认都是零 。   但在Java中有区别,new int[维数]{初始化值}中,如果指定了维数,就不用指定初始化值;如果指定了初始化值就不用指定维数,所以int [] arr =new int [3]{2,3}的却是不可以的。。。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为你使用了java数组定义的静态定义数组,你在定义的时候就必须的赋值啊。
如果是动态的话,没有赋值是可以的,因为没有赋值的角标会默认赋值为0.
像 int[] arr=new int[3];  arr[0]=2;arr[2]=1;这样是可以通过编译的
回复 使用道具 举报
new int [3]   这个3 代表的是数组的长度,你长度既然定义了,内容只有两个 程序无法编译通过
回复 使用道具 举报
在int[] arr=new int[3]{2,3}中,[]中的3代表数组中元素的个数,{}中代表数组中的元素,在这个表达式中数组元素的个数与数组中的元素不相符所以编译不通过。
回复 使用道具 举报
我试了一下,就算{}里数据与数组长度一样也不行
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:52
7#
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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马