小编典典

使用和不使用`New`关键字定义数组有什么区别?

java

看这两个简单的程序:

程序1:

public class GenArray extends Applet {
    byte[] myArray  ={ (byte) 'M', (byte) 'o', (byte) 'd', (byte) 'e',
            (byte) '1' };
}

程式2:

public class GenArray extends Applet {
    byte[] myArray = new byte[5];
    {
        myArray[0]  =(byte) 'M';
        myArray[1]  =(byte) 'o';
        myArray[2]  =(byte) 'd';
        myArray[3]  =(byte) 'e';
        myArray[4]  =(byte) '1';
    }
}

我想知道MyArray在Program-1 MyArray的最后一行和Program-2 的最后一行之间是否有区别?(任何区别!)


阅读 232

收藏
2020-11-30

共1个答案

小编典典

在第二个程序中,{ ... }are不是数组定界符,它们是块定界符;在这种情况下,它们用于提供所谓的初始化块,该初始化块在实例化类的新实例时执行。

创建初始化数组的“正确”方法是:

new byte[] { 1, 2, 3 };

在初始化引用,使用现有引用或将数组传递给方法时,都可以始终使用它:

byte[] myArray = new byte[] { 1, 2, 3 };    // OK
myArray = new byte[] { 4, 5, 6 };           // OK
anObject.someMethod(new byte[] { 7, 8, 9}); // OK

但是,第一种变体非常普遍,因此Java允许您 在特定情况下new byte[]省略该部分: __

byte[] myArray = { 1, 2, 3 };    // OK
myArray = { 4, 5, 6 };           // Does not compile
anObject.someMethod({ 7, 8, 9}); // Does not compile
2020-11-30