2017-03-03 5 views
-1

オブジェクトのコピー(コピーコンストラクタを使用してintインスタンス変数を持つ)は元のオブジェクトと同じインスタンス変数を取得しますか?もしそうなら、私は元のオブジェクトとコピーオブジェクトが同じインスタンス変数を参照しているのだろうかと思っていました。以下の例を見てください。既存のBankAccountのコピーを作成すると、両方とも同じインスタンス変数balanceaccountNumberを参照していますか? オブジェクトのコピーと元のオブジェクトのインスタンス変数

public class BankAccount { private static int bankAccountCount = 0; private double balance = 0.0; private int accountNumber = 1; public BankAccount() { accountNumber += bankAccountCount ; bankAccountCount++; } public BankAccount(double startBalance) { this(); balance = startBalance; } public BankAccount(BankAccount accountToCopy) { // copy-constructor balance = accountToCopy.balance; accountNumber = accountToCopy.accountNumber;
+0

プリミティブは参照型ではありません。ここには別個のインスタンス変数があります。 –

+0

同じ質問を2回聞かないでください。元の質問にさらに情報を追加する場合は、質問の下にある[編集]リンクを使用します。 –

答えて

0

変数がstaticでない限り、インスタンス変数はNOTです。 静的変数はクラスに属し、インスタンス化されたオブジェクトには属しません。あなたのケースでは:

private static int bankAccountCount = 0; //Would all share the same value 
private double balance = 0.0; //would not transfer 
private int accountNumber = 1; //would not transfer 

あなたが好きだろうか超える値をコピーするために、あなたは、値の表示を変更、または値にアクセスするためのアクセサメソッドを提供する必要がありますどちらか。

あなたは、静的変数を持つ2つの異なるオブジェクト、両方を持っていたので、場合:あなたは、このクラスのオブジェクトを作成すると

Example e = new Example(); 

カウンタは今1

に等しい

public class Example{ 

    private static int counter = 0; 

    public Example(){ 
     counter ++; 
    } 
} 

第2のオブジェクトを作成する場合:

Example e2 = new Example(); 

カウンタは両方のオブジェクトで2になりました。

+0

**これは、彼が3番目のコンストラクター**でコピーしたときに何が起こるかを尋ねているので、半定量的です。しかし、それらは基本的な型のものであるため、結果として得られる2つのオブジェクトでは参照ではなく、したがって独立しています。 –

+0

有効なポイント。それを指摘していただきありがとうございます。 – Ryan

+0

@JとRyan:accountNumberが別のクラスのオブジェクトの場合 – Coder

関連する問題