黑马程序员技术交流社区

标题: 这样定义数组 int [] a1 = new a1[3]{1,2,3]为什么不对呢 [打印本页]

作者: cain    时间: 2014-6-9 23:29
标题: 这样定义数组 int [] a1 = new a1[3]{1,2,3]为什么不对呢
本帖最后由 cain 于 2014-6-11 00:12 编辑

这样定义数组 int [] a1 = new a1[3]{1,2,3]为什么不对呢

作者: Boiled_Water    时间: 2014-6-9 23:41
new 后面的a1是什么类型
作者: 谭荣强    时间: 2014-6-9 23:41
定义和初始化不可以放在一起。
作者: cain    时间: 2014-6-9 23:42
int [] a1 = new int[3]{1,2,3]  写错了,不好意思
作者: 谭荣强    时间: 2014-6-9 23:43
初始化的两种方式
静态初始化:
int[] arr = {1}
动态初始化;
int arr =[2];
arr[1]=0;
作者: 四顾行者    时间: 2014-6-9 23:54
数组的定义可以是静态初始化和动态初始化,而这样同时使用是不正确的
作者: java木    时间: 2014-6-10 00:12
数组静态初始化和动态初始化不能写到一起。
静态初始化  int []a1=new int[]{1,5,4};
动态初始化 int[] a1=new int[3];
a1[0]=1;a1[1]=5;a1[2]=4;
至于为什么不能写到一起,我也在纠结着,嘿嘿
作者: java木    时间: 2014-6-10 00:21
我觉得这应该是java的一种防错强行规则。你看在【】中定义了长度,但在{}定义元素2时,多写了或少少写了不就出现错误了嘛,所以避免这种情况的发生,java就是这种定义这种定义数组的方法为错误的。
当然这只是我的猜想
作者: liujie445012100    时间: 2014-6-10 00:54
int [] a1 = new a1[3][1,2,3],这样就对了,美女耐心点嘛
作者: 林峰    时间: 2014-6-10 02:15
本帖最后由 林峰 于 2014-6-10 02:59 编辑

你真是二的可以,符号用错{1,2,3]就算了,你还能起两个一样的名字,给出元素就不必再说长度了,计算机会自动算出,你如果指出的长度和元素个数实际不一致的话,计算机也会崩溃的,既然已经赋值了,基本数据类型的可以不用new了直接 :   
                    int[] a1={1,2,3};   
若没有赋值:                    
                    int[] a1=new int[3];//然后再赋值:                  
                    a1[0]=1;a1[1]=2;a1[2]=3;//如果还存在没有赋值的角标,取的值是0
也可以         
                    int[] a1=new int[]{1,2,3};







作者: peku    时间: 2014-6-10 09:51
其实这相当于两种的初始化在一起,那如果这两种初始化如果存在矛盾那到底应该怎么初始化JVM就会不明确,比如
int[] arr=new int[3]{0,1,2,3},到底是应该建立一个3个元素的数组呢还是4个元素的数组呢?所以为了避免建立数组出现这种情况只允许使用其中一种初始化方式
作者: 不去会死    时间: 2014-6-10 10:01
这主要还是java设定的一些防错机制吧。防止数组的元素多的时候浪费太多时间在数数上了,而且比较容易出错,其实java中这种思想还是挺常见的
作者: pengyu    时间: 2014-6-10 11:52
上面说的很对啊,,,敲代码的时候仔细点了
作者: zly1992008    时间: 2014-6-10 13:59
区别两种初始化方式。。
作者: EDDY_Liang    时间: 2014-6-10 16:07
我今天刚好复习到数组,可以给你解答一下。。
数组在java里面有3种方法定义。
1, int[ ] a = new int[6];
       arr[0] =  7;
      arr[1] = 5;
.......arr[5] = 6;
2,    int[] a = new int[ ] {7,5,6,6,5,8}
3,    int[] a = {7,5,6,6,5,8}
  这三种,而你说的是第二种,[ ]里面是不允许写长度的,就算长度是正确的也一样。
作者: LFW    时间: 2014-6-10 22:00
定义的格式有静态和动态2种,静态就是用int [] a1 =new int[] {1,2,3}这样的方式,可以省略后边的new int[],简写为int [] a1 ={1,2,3},这静态方式适合数组元素值确定的情况。动态初始化的方式:int[] a1=new int[3],然后各角标依次赋值:a1[0]=1,a1[1]=2,a1[2]=3。毕老师对为什么不int [] a1 = new  int[3]{1,2,3}这样来定义的解释是,如果你这样赋值,万一你的数组是{1,2,3,4}这样4个元素,而前边你又定义new int[3]数组长度为3的话,虚拟机就会疯掉,因为它不知道究竟数组长度是3还是4.
作者: LFW    时间: 2014-6-10 22:01
楼主都中级黑马了,问问题前先再去看看视频吧。。我也是初学不久,各自加油吧。期待同期有你、
作者: cain    时间: 2014-6-11 00:12
谢谢大家啊,有些问题 介于明白和不明白直接,有的说的 要这样做,并没有说出 为什么要这样?
作者: peterbu    时间: 2014-6-11 01:56
林峰 发表于 2014-6-10 02:15
你真是二的可以,符号用错{1,2,3]就算了,你还能起两个一样的名字,给出元素就不必再说长度了,计算机会自动算 ...

这才是正解啊!!




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