Java中的数组声明和初始化

6
  1. int[] array = new int[]{1,2,3};
    
  2. int[] array = {1,2,3};
    
  3. int[] array;
    array = new int[]{1,2,3};
    
  4. int[] array;  
    array = {1,2,3};
    

有人能解释一下为什么最后一个是错误的,以及我们能够做到第二个的原因吗?

2个回答

2
作为对你问题的直接回答,这是因为Java语言是这样定义的。当我们声明一个新的字段或局部变量时,我们可以通过表达式(new int[] { 1, 2, 3 })或数组初始化器({1, 2, 3})来初始化它。当对先前声明的字段或局部变量进行赋值时,我们只能使用表达式。
我只能猜测为什么存在这种差异,但我认为这可能与数组是具体化的事实有关,也就是说,在运行时,数组知道其元素的类型。这意味着当您想创建一个新数组时,需要指定元素类型。在初始化数组时,元素类型是可用的,因为数组的类型是明确指定的,但在表达式中,通常情况下并不是这样。当然,可以尝试推断元素的类型,但语言设计者选择不这样做。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接