创建数组对象和使用花括号分配数组有什么区别?

时间:2017-05-07 13:21:19

标签: java arrays

在Java中,我在网上找到了一些教程,当谈到数组时,他们的教学方式不同,

示例1:

使用“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

示例2:

使用花括号为数组赋值。

int[] values = {34,45,62,72}

System.out.println (values [2]); //Output : 62

这两个例子之间有什么区别?

5 个答案:

答案 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)

  1. 第一个,声明,初始化,然后分配值(详细代码)
  2. 第二个,声明和赋值(代码效果相同,可以称之为二合一)

答案 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}

如果你谈论这两者的功能,那么它们都将起作用。 这取决于你想要走哪条路。