在Java中声明Array变量时
true
我们已经将基本类型声明为int(在上面的示例中)。
那为什么我们在使用new时必须再次定义类型。
Int Myarray [];
为什么不能像下面这样
Myarray = new int[12];
//因为我们已经知道此数组的基本类型将是int。
答案 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
什么? Cat
或Dog
答案 4 :(得分:0)
简短回答:因为。
更长的答案:因为Java是这样设计的。 Java通常更喜欢冗长而不是歧义。由于Java类是多态的,因此可能并不总是清楚要实例化什么类型。想象这样的事情:
Comparable[] myArray = new[22];
鉴于此,您还应该知道在运行时Java数组是无类型的,因此在某些情况下,数组可能包含不适合数组元素类型的对象。
有些东西与您在Java 10中的想法很接近。在某些情况下,您可能会推断出类似以下类型的东西:
var myArray = new int[22];
但是,您应该对此小心。