2012-01-08 4 views
69

の配列オブジェクトであり、これは、配列自体はオブジェクトであることを意味していますか? C++では配列は単なるポインタなので、メソッドはありません。たちは</p> <pre><code>String[] array = new String[10]; int size = array.length; </code></pre> <p>のような配列を宣言することができ、JavaでのJava

+5

いいえ、C++での配列は、配列、およびないではない配列です。 –

+37

'if(array instanceof Object)System.out.println(" Yes! ")' – skaffman

+6

ああ、C++では、配列とポインタの両方がオブジェクトです。 –

答えて

164

はい。

Java言語仕様section 4.3.1はで始まる:

オブジェクトはクラスインスタンスまたはアレイです。

+1

今まで私はオブジェクトがクラスインスタンスと同義であったと仮定し、その配列は特別な言語の機能なのです。 – Ruben9922

48

はい。 Java言語仕様writes:Javaプログラミング言語の

は、アレイは、(§4.3.1)、動的に作成されるオブジェクトであり、Object型の変数に割り当てることができる(§4.3.2)。 Objectクラスのすべてのメソッドは、配列上で呼び出すことができます。

+0

arrayがオブジェクトの場合、それはクラスのインスタンスであるとは限りませんか?もしそうなら、そのクラスを拡張することはできますか? –

+5

いいえ、そうではありません。Java仕様[記述](http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.3.1):「Anオブジェクトはクラスインスタンスまたは配列です。クラスインスタンスはクラスインスタンス作成式(15.9)によって明示的に作成されます。配列は明示的に配列作成式(15.10)で作成されます。 "そして、いいえ、配列を拡張することはできません。これは、extends節[必須](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.4) ClassTypeがあります。 – meriton

2

私は答えを「はい」と言っていますが、厳密に言えば、配列はC++のオブジェクトでもあります。現在の規格(FDIS)の[intro.object]§1.8から:

オブジェクトストレージの領域です。

5

はい、Javaのオブジェクトです。

array.lengthを実行するときは、メソッドを呼び出すのではなく、配列のlengthフィールドにアクセスするだけです。 Arraysクラスには多くの静的メソッドがあります。

2

Javaの配列には、オブジェクトと共有しない独自のバイトコードがあることに注意することが重要です。それらは確かにオブジェクトですが、低レベルで少しずつ異なって扱われます。

0

javaの各配列はオブジェクトです ex int [] a =新しいint [2];したがって、newはオブジェクトの作成に使用され、オブジェクトであるため、a.getClass()。getName();を使用してクラス名を確認できます。

21

Javaに聞かせてください。

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    System.out.println(args instanceof Object); 
    int[] someIntegers = new int[] {42}; 
    System.out.println(someIntegers instanceof Object); 
    } 
} 

出力:

true 
true 
関連する問題