java - Java中的静态初始化和动态初始化有什么区别?

标签 java arrays initialization

<分区>

最近在练习 LeetCode 的时候,我发现了一些 trick solution。它使用一个 Object o 来引用一个数组Object o = new Object[]{null,null};,我猜也许是因为在java中一切都是对象。但是当我尝试这种方式时,它出错了。Object o3 = {1,2};所以我尝试了各种方法来初始化一个数组,我想看看区别,像这样

int arr[] = {1,2};
Object o = arr;
Object o1 = new int[2];
Object o2 = new int[]{1,2};
Object o3 = {1,2};

只有o3会编译出错。不知道是不是初始化方式的问题。我知道用静态初始化的时候会先分配内存,用动态初始化的时候不会。还有什么区别导致此错误?当我使用 new 创建数组时。它在 jvm 中做了什么?提前致谢。

最佳答案

初始化器 {1,2}new int[] {1,2} 的简写。此简写只能用作 int[] 类型变量的初始值设定项。1 例如,以下内容有效:

int arr[] = {1,2};

这不是:

int arr[];
arr = {1,2}; // ERROR

相反,您需要使用:

int arr[];
arr = new int[] {1,2};

同样,您可以使用:

Object o3 = new int[] {1,2};

附言以上适用于 static 以及实例字段,也适用于局部变量。 Java 没有“静态与动态初始化”之类的区别。这是更多的 C++ 术语。

1嗯,它也可以用于 byte[]long[] 类型的变量, float[]Integer[] 等,其中文字 12 是赋值兼容的。查看Section 10.6 of the Java Language Specification .

关于java - Java中的静态初始化和动态初始化有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43163966/

相关文章:

java - 静态方法是否应该与具有实例方法的类分开?

java - BLE设备与同一设备上不同Android应用程序之间的通信

java.lang.InstantiationException : java. lang.Class<com.wavedevelopers.eventsplanning.BookingForm> 没有零参数构造函数

arrays - 从 GoLang 中单独的 []byte 结果创建 JSON 数组

c - C 中以前的声明是否改变了指针的初始化方式?

c++ - 为什么我们不能在声明时初始化类成员?

c++ - 有没有一种安全的方法可以让 std::thread 作为类的成员?

java - StartActivity 一旦用户在权限屏幕上单击允许

javascript - 如何根据给定的索引值将大数组拆分为较小的数组,

javascript - 如何创建一个具有多维数组输入、转换它并输出新的多维数组的函数