【问题标题】:what's the differences between static initialization and dynamic initialization in Java? [duplicate]Java中的静态初始化和动态初始化有什么区别? [复制]
【发布时间】:2017-08-27 02:23:54
【问题描述】:

最近在 LeetCode 上做一些练习时,我找到了一些技巧解决方案。它使用 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 中做了什么?提前谢谢。

【问题讨论】:

  • "在 java 中一切都是对象" 不,原语不是对象
  • 一个“区别”是Java中没有“静态初始化”之类的东西。

标签: java arrays initialization


【解决方案1】:

初始化器{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

【讨论】:

  • {..} 文字数组创建也可以使用任何引用类型执行。喜欢:String[] strings = {"one", "two"};
  • @GiorgiTsiklauri - 你是对的,当然。这样的数组可以是任何元素类型,无论是原始的还是引用的。在我看来,OP 对用整数字面量初始化的数组特别感兴趣,这就是为什么我以我的方式表达我的回应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2014-03-16
  • 2010-12-11
  • 1970-01-01
  • 2023-03-26
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多