0

オブジェクト Carta には、「Cara」と「Palo」の 2 つの文字列フィールドがあります。次のようなコンストラクタです。

public Carta(String a, String b){Cara = a, Palo = b}

および変更された toString メソッド:

public String toString(){return Cara+" de "+Palo}

だから私はこれを行う場合:

Carta[] arreglo = {new Carta("a","b") , new Carta("c","d"), new Carta("f","g"), new Carta("h","i") };

Carta abs = arreglo[0];
System.out.println(abs);

arreglo = Arrays.copyOfRange(arreglo,1,arreglo.length);

System.out.println(abs);

なぜ私はこの出力を得るのですか:

a de b 
a de b

abs は配列arregloの最初の要素への参照にすぎないと思った

4

2 に答える 2

2

このコード片

Carta abs = arreglo[0];

arreglo配列のインデックス 0 にあるオブジェクトへの参照をvariable に格納しますabs。その後、配列内の要素を変更すると、abs変数はまだ前のオブジェクトを参照しています。

これ

System.out.println(abs);

最初の要素を出力し、あなたはそうします

System.out.println(abs);

もう一度それを印刷します。

于 2013-10-11T02:11:12.527 に答える
1

この出力が得られる理由:

a de b
a de b

abs は配列arregloの最初の要素への参照にすぎないと思いました。

absCartaインスタンスへの参照です。配列ではありませんarreglo。したがって、そのインスタンスを変更しないため、absオブジェクトの状態は同じままです。あなたがしていることはarreglo、新しい配列を参照するように割り当てることです。

于 2013-10-11T02:12:49.610 に答える