1

C++ の場合:

class Rectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area () {return (x*y);}
};

int main () {
  Rectangle rect;
  rect.set_values (3,4);
}

Java の場合:

class Rectangle {
    int x, y;
    void set_values (int x,int y);
    int area () {return (x*y);}
}

public static void main(String[] args) {

Rectangle rect=new Rectangle(3,4);

}

C++ コンパイラでは、rectオブジェクトを作成し、メモリを 4 バイト確保します。Javaがオブジェクトを作成する方法を知りたいですか?

4

3 に答える 3

3

あなたがするとき: -

Rectangle rect;

C++ では、コンパイラによって提供される引数 0 のデフォルト コンストラクタを呼び出します。

引数が 2 つのコンストラクターを使用する場合は、次のようにする必要があります。

Rectangle rect(3, 4);

ここで、2引数のコンストラクターを明示的に提供する必要があります。そうしないと、コンパイルされません。


さて、Java の場合も同様です。もしあなたがそうするなら: -

new Rectangle();

その場合、コンパイラはC ++のようにデフォルトの引数なしのコンストラクターを提供しますが、オブジェクトを作成すると次のようになります。

new Rectangle(3, 4);

次に、クラスに2引数のコンストラクターを明示的に提供する必要があります。そうしないと、2番目の例のようにコンパイルされず、コンパイルされません。

また、 を指定するparameterized constructorと、その場合、コンパイラはデフォルトのコンストラクターを提供しません。引数なしのコンストラクターを使用する場合は、明示的に指定する必要があります。これは両方で十分でありJavaC++

現在、memory allocation懸念されているように、Java はプラットフォームに依存しないため、int型のサイズは32 bitsすべてのプラットフォームで です。これは、C++データ型のサイズがプラットフォームに依存する場合とは対照的です。

JVM Specification - The Structure of JVMさまざまなタイプの割り当てに関する詳細情報については、を参照してください。

PS : -

Java クラスとオブジェクトの基本については、以下のリンクを参照することをお勧めします。

于 2012-10-25T04:52:31.430 に答える
0

32または64ビット:

Rectangle rect

スタックで予約されています。

次に、32 + 32 = 64 bits次の目的でヒープから割り当てられます。

new Rectangle(3,4);

Java はプラットフォームに依存しない言語であり、すべてのプリミティブ型には特定のサイズがあります。

ここを参照してください: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

于 2012-10-25T04:53:42.393 に答える
0

Javarectではオブジェクトではなく、実際にreferenceobject.

内部にnew Rectangle(3,4);を作成し、その を返すと言うと、参照アドレスは適切な型の変数になります。これはあなたの場合です。objectheapreference addressobjectassignedRectangle rect

ここに画像の説明を入力

Javaでオブジェクトを作成するリソース

于 2012-10-25T05:08:48.097 に答える