数组对象的类

时间:2013-12-13 06:08:15

标签: java arrays

Java中的每个对象都有一个原型(类),对象是这些原型的实例。如果我声明一个数组int a[] = new int[5];,这将创建一个对象,该对象可以在a引用的堆中保存5个整数。我们有这个对象的原型吗?数组对象的状态和行为是什么?长度是否被视为数组对象的状态?

3 个答案:

答案 0 :(得分:1)

Is an array an object in java

如果您来自javascript,原型与类不完全相同。如果你没有调用类原型

会更好
  

java中的每个对象都有一个原型(类)

java中的每个对象都是类的实例,但java中的所有内容都不是对象。出于效率原因,int,boolean,float,double,long和short(如果我错过了,请原谅我)是 primitives ;它们不是物体。数组也不是常规对象。数组不是任何特定类的实例,但它仍然是一个对象。要检查某些内容是否为数组,您可以执行此操作:

int arr[] = new int[9];
if (arr instanceof int[]) {
    System.out.println("It's an array of ints!");
}

上面的代码应输出:这是一个整数数组!

编辑:我意识到你可能一直在问JavaScript而不是Java。如果是这样,那么在JavaScript中,数组就是Array原型的实例。

编辑:来自javaspec

  

10.1。数组类型   ...   数组类型的超类型在§4.10.3中指定。

     

数组类型的直接超类是Object。

     

每个数组类型都实现了Cloneable和java.io.Serializable接口。

  

4.10.3。数组类型之间的子类型

     

以下规则定义了数组之间的直接超类型关系   类型:

If S and T are both reference types, then S[] >1 T[] iff S >1 T.

Object >1 Object[]

Cloneable >1 Object[]

java.io.Serializable >1 Object[]

If P is a primitive type, then:

    Object >1 P[]

    Cloneable >1 P[]

    java.io.Serializable >1 P[]

所以数组是一种特殊类型的Object,它没有可识别的类,但它仍然有一个类型。它位于类层次结构中,它的方法在规范中定义。

阅读http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html了解更多详情

答案 1 :(得分:1)

是。它有一个原型,因为它是Object类的一个实例。

    Integer a[] = new Integer[5];
    int b[] = new int[5];

    if (b instanceof Object) {
        System.out.println("YES");
    } else {
        System.out.println("NO");
    }
    if (a instanceof Object) {
        System.out.println("YES");
    } else {
        System.out.println("NO");
    }

输出:

YES

YES

如果您使用IDE,我认为您可以使用引用检查状态和行为。而且我认为长度可以被视为一个州。检查this

enter image description here

答案 2 :(得分:0)

你不应该在当前的上下文中使用word prototype,因为@Eliiott特别说JavaScript有原型。但是根据类的概念,根据oops原则,对象的状态被定义为其实例变量的值,因此长度肯定会在数组对象的状态下,因为在任何长度都是数组类中的字段,以及对象的行为它是什么(它的方法),所以所有实例方法数组类都将是数组对象的行为。