数组变量基本类型

时间:2018-08-17 10:01:54

标签: java

在Java中声明Array变量时

true

我们已经将基本类型声明为int(在上面的示例中)。

那为什么我们在使用new时必须再次定义类型。

Int Myarray [];

为什么不能像下面这样

Myarray = new int[12];

//因为我们已经知道此数组的基本类型将是int。

5 个答案:

答案 0 :(得分:1)

因为Java被认为是一种强类型语言。

如果您希望在不指定分配内容类型的情况下进行分配,而又知道它在运行时仍然可以运行,则可以使用其他语言,例如javascript。

答案 1 :(得分:1)

因为您还可能将数组变量声明为Object

Object array = new int[12];

在Java10 +中的方法(用于局部变量)中,您可以使用

var myArray = new int[12];

答案 2 :(得分:1)

传统上,Java非常冗长。最新版本尝试遵循“不要重复自己”(DRY)原则来简化内容。例如,在Java 6中,您将编写:

(defmacro do-when [x & xs]
  (if xs
    `(when ~x (do-when ~@xs))
    `~x))

(do-when
  (let [x 1 y 2] (println "step 1") (= x (dec y)))
  (rand-nth [true false])
  "randomly successful result")

但是Java 7允许:

List<String> myList = new ArrayList<String>();

对于数组来说并非如此。这是因为,出于对最初的不良设计决策的向后兼容性的考虑,您可以执行以下操作:

List<String> myList = new ArrayList<>();

错误Object[] myArray = new String[10]; 现在可以导致myArray。但是事实仍然是您可以如上所述声明和初始化ArrayStoreException,因为Java 1.0允许它和更高版本必须兼容。所以现在我们不能写

myArray

因为编译器不知道我们要使用Animal[] myArray = new [10]; 还是Dog[10]对其进行初始化。

Java 10提供了用于初始化局部变量的Cat[10]关键字,这意味着您不必重复类型名称:

var

这里var myArray = new int[10]; 的编译时类型为myArray。编译器允许我们对int[]进行所有int数组操作,就像我们已经将其声明为myArray一样,因为它就是这样。

答案 3 :(得分:0)

举个例子:

public interface Animal {

}

public class Cat implements Animal {

}

public class Dog implements Animal {

}

然后:

Animal animal;
animal = new ???

new什么? CatDog

答案 4 :(得分:0)

简短回答:因为。

更长的答案:因为Java是这样设计的。 Java通常更喜欢冗长而不是歧义。由于Java类是多态的,因此可能并不总是清楚要实例化什么类型。想象这样的事情:

Comparable[] myArray = new[22];

鉴于此,您还应该知道在运行时Java数组是无类型的,因此在某些情况下,数组可能包含不适合数组元素类型的对象。

有些东西与您在Java 10中的想法很接近。在某些情况下,您可能会推断出类似以下类型的东西:

var myArray = new int[22];

但是,您应该对此小心。