Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建数组对象和使用大括号指定数组之间有什么区别?_Java_Arrays - Fatal编程技术网

Java 创建数组对象和使用大括号指定数组之间有什么区别?

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

在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
这两个例子有什么不同

  • 第一个、声明、初始化,然后赋值(详细代码)
  • 第二个,声明和赋值(代码少,效果相同,可以称之为二合一)

  • 区别仅在源代码方面

    使用大括号进行数组初始化的特殊语法只是。意思:编译器允许您使用更简洁的方式来表达某些东西。但是,对于第二种风格,你做不到任何事情,而对于另一种风格,你做不到任何事情

    因为,最终,在运行时,将创建数组并分配其插槽

    这实际上只是为了让您更容易编写源代码,让人类读者更容易理解

    当然,有一件事:大括号解决方案使您无法提供“不够”的值。当您将数组创建和插槽初始化分开时,第二步可能会以某种方式出错(例如,忘记初始化先前创建的数组的最后一个元素)

    可以肯定的是:这是编译到.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中键入的内容要少得多。除了值之外,基本上什么都没有。。。你只能在声明点使用第二种形式。只是为了记录:请考虑在某个时候接受一个答案。哇,好吧,基本上它们是一样的。谢谢你的信息!