在Java中,我在网上找到了一些教程,当谈到数组时,他们的教学方式不同,
使用“new”关键字创建数组对象,然后为其指定值。
int[] values;
values = new int[5];
values [0] = 10;
values [1] = 20;
values [2] = 30;
values [3] = 40;
values [4] = 50;
System.out.println (values[2]); //Output : 30
使用花括号为数组赋值。
int[] values = {34,45,62,72}
System.out.println (values [2]); //Output : 62
这两个例子之间有什么区别?
答案 0 :(得分:3)
区别仅在于源代码方面。
使用花括号进行数组初始化的特殊语法只不过是 syntactic sugar 。含义:编译器允许您使用更简洁的方式表达某些内容。但是你无法用其他风格做的第二种风格。
因为,最后,在运行时,会创建数组并分配其插槽。
这实际上只是为了让您更容易编写更容易为人类读者理解的源代码!
嗯,当然有一件事:花括号解决方案使您无法提供“不够”的值。当您分离数组创建和插槽初始化时,可能会以某种方式使第二步失误(例如,忘记初始化先前创建的数组的最后一个元素)。
只是为了确定:这是您在编译成.class然后使用javap -c
进行反汇编后会看到的内容:
示例1代码:
0: iconst_5
1: newarray int
3: astore_1
4: aload_1
5: iconst_0
6: bipush 10
7: iastore
和示例2:
0: iconst_4
1: newarray int
3: dup
4: iconst_0
5: bipush 34
7: iastore
如您所见:字节代码指令完全相同(减去您推入数组的不同值)
答案 1 :(得分:0)
答案 2 :(得分:0)
在示例1中,JVM为5个整数数组元素分配内存,每个元素用0初始化。如示例2所示,JVM再次为4个整数数组元素分配内存,但不是用0初始化它们,而是直接用这些元素初始化元素花括号中指定的值。
答案 3 :(得分:0)
据我所知,两者意味着相同。在第一种情况下,您的初始化可以在同一块的任何位置,而在第二种情况下,您只能在声明而不是其他地方使用。
答案 4 :(得分:0)
这两者的区别在于数组的声明和数组的初始化以及赋值给它的元素。
方法1
int[] values; //array declaration
values = new int[5]; //array initialization, here memory will be allocated to values array.
values [0] = 10; //assignment of values
values [1] = 20;
values [2] = 30;
values [3] = 40;
values [4] = 50;
在方法2中,我们在单行语句中完成所有这些工作。
int[] values = {34,45,62,72}
如果你谈论这两者的功能,那么它们都将起作用。 这取决于你想要走哪条路。