Java 使用和不使用'New'关键字定义数组有什么区别?
看看这两个简单的程序: 方案1:Java 使用和不使用'New'关键字定义数组有什么区别?,java,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]; { my
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';
}
}
我想知道Program-1最后一行中的
MyArray
和Program-2最后一行中的MyArray
之间是否有任何区别?(有什么不同!)有很大的不同。前者只能在数组初始化期间使用。如果尝试使用数组常量表达式(如{1,2,3}
初始化已定义/声明的数组,则代码编译将失败。后者可随时使用。两种情况下的字节码相同 在第二个程序中,{…}
不是数组分隔符,它们是块delimeters;在本例中,它们用于给出所谓的初始值设定项块,在实例化类的新实例时执行该块
创建初始化数组的“正确”方法是:
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允许您在特定情况下保留新字节[]
部分:
但是我可以做
arr=newint[15]代码>@Prashant-是。您可以这样做,因为这不会创建数组常量。这不会更改所创建的数组对象,即{1,2,3},它只是更改arrI的引用点,不会说“创建”任何不同。前一种语法不能在声明之外使用,但是对象没有什么不同。这个答案实际上是不正确的。当我们使用新的less版本创建数组时,可以修改创建的数组和引用。尝试将“编译时错误”替换为arr[0]=4
。好的,这两个都编译为完全相同的字节码。@immibis-字节码相同。这两种方法都调用newarray
,但在第一种方法中,只有在初始化期间才能创建数组
byte[] myArray = { 1, 2, 3 }; // OK
myArray = { 4, 5, 6 }; // Does not compile
anObject.someMethod({ 7, 8, 9}); // Does not compile