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

4

在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

这两个例子有什么不同之处?

2
不多。示例2中输入的要少得多。 - JJF
7
除了值以外,基本上什么也没有...不过你只能在声明时使用第二种形式。 - Jon Skeet
仅供记录:请考虑在某个时候接受其中一个答案。 - GhostCat
5个回答

3
区别仅在于源代码方面。
使用花括号进行数组初始化的特殊语法只不过是语法糖。这意味着编译器允许您使用更简洁的方式表达某些内容。但是,您使用第二种风格所能做的事情都可以用其他风格来完成。
因为最终,在运行时,数组被创建并分配其插槽。
这实际上只是为了使您更轻松地编写易于人类阅读理解的源代码!
当然,有一件事:花括号的解决方案使您无法提供“不足”的值。当您将数组创建和插槽初始化分开时,可能会以某种方式出错(例如忘记初始化先前创建的数组的最后一个元素)。
只是为了确保:这是在编译为.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       

正如你所看到的:字节码指令完全相同(除了将不同的值推入数组)。

0
  1. 第一种,先声明、初始化,再赋值(详细代码)
  2. 第二种,声明并赋值(代码更简洁,效果相同,也可以称之为两合一)

1
哇,好的,基本上它们是一样的。谢谢你提供的信息! - Alexander

0
在示例1中,JVM为5个整数数组元素分配内存,并且每个元素都初始化为0。而在示例2中,JVM再次为4个整数数组元素分配内存,但是不是将它们初始化为0,而是直接使用花括号中指定的值进行初始化。

0
据我所知,两个意思是一样的。在第一种情况下,您的初始化可以在同一块中的任何位置,而在第二种情况下,您只能在声明时使用,而不是其他地方。

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;

在第二种方法中,我们使用一行语句完成所有这些工作。
int[] values = {34,45,62,72}

如果您谈论这两个的功能,那么它们都能够达到同样的效果。 这取决于您想要走哪条路。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接