1) int[] a = new int[3]; 2) int[] b = new int[]{1,2,3}; --------------------------------------------------- 就这两种写法 等号后面的中括号里的数字是用来声明的,不是用来实例化的。 如果你加上大括号就相当于把它直接实例化了,就不需要声明了。 --------------------------------------------------- 也不知道我说的对不对,LX的补充纠正
晕啊, int[] a = new int[2]{1,2}; 你这样写,让虚拟机判断用哪个么? 虚拟机是通过new int[2] 中的"2" 知道你要建的这个数据对象的大小的,或者通过后面的{1,..}来确定, 如果不指定就分给默认的大小空间, 而你两个都加上了,它怎么知道要哪个???
我一直是写int[] a = new int[]{1,2};
可以吧。
为什么中间的3不能有??
这个可以有。
2) int[] b = new int[]{1,2,3};
---------------------------------------------------
就这两种写法
等号后面的中括号里的数字是用来声明的,不是用来实例化的。
如果你加上大括号就相当于把它直接实例化了,就不需要声明了。
---------------------------------------------------
也不知道我说的对不对,LX的补充纠正
int[] a = new int[2]{1,2};
你这样写,让虚拟机判断用哪个么?
虚拟机是通过new int[2] 中的"2" 知道你要建的这个数据对象的大小的,或者通过后面的{1,..}来确定,
如果不指定就分给默认的大小空间,
而你两个都加上了,它怎么知道要哪个???
1、int[] a = {1,2}; 2、int[] a = new int[2];
a[0] = 1; a[2] =2;
int[] a = new int[]{1, 2, 3};
int[] a = {1, 2, 3};
应该就这3种,int[] a = new int[2]{1,2};为什么不行这要问SUN公司啊,人家定的规则,呵呵~
比如说有个方法:
private void f(int length){
int[] a = new [length]{1, 2, 3, 4}
}如果这段程序编译通过的话,结果是无法预知的当然,如果在设计编译器时规定这个 length 必须是一个常数就可以通过编译的话,我觉得也是应该办得到的。
不知道sun的设计都是怎么想的,但是至少我觉得编译器不是很有必要支持这种写法。