Java 创建数组对象和使用大括号指定数组之间有什么区别?
在Java中,我在网上找到了一些教程,在数组方面,它们的教学方式有所不同 例1: 使用“new”关键字创建数组对象,然后为其赋值Java 创建数组对象和使用大括号指定数组之间有什么区别?,java,arrays,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: 使用大括号为数组赋值 i
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
这两个例子有什么不同
区别仅在源代码方面 使用大括号进行数组初始化的特殊语法只是。意思:编译器允许您使用更简洁的方式来表达某些东西。但是,对于第二种风格,你做不到任何事情,而对于另一种风格,你做不到任何事情 因为,最终,在运行时,将创建数组并分配其插槽 这实际上只是为了让您更容易编写源代码,让人类读者更容易理解 当然,有一件事:大括号解决方案使您无法提供“不够”的值。当您将数组创建和插槽初始化分开时,第二步可能会以某种方式出错(例如,忘记初始化先前创建的数组的最后一个元素) 可以肯定的是:这是编译到.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中,JVM为5个整数数组元素分配内存,每个元素都用0初始化。如例2所示,JVM再次为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}
如果您谈论这两个的功能,那么它们的工作原理是一样的。
这取决于你想走哪条路。不多。在示例2中键入的内容要少得多。除了值之外,基本上什么都没有。。。你只能在声明点使用第二种形式。只是为了记录:请考虑在某个时候接受一个答案。哇,好吧,基本上它们是一样的。谢谢你的信息!