0

Carta 对象有两个字符串字段:“Cara”和“Palo”,构造函数如下:

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 处对象的引用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 的第一个元素的引用。

abs它是对Carta实例的引用。不给数组arreglo。因此,当您不修改该实例时,它abs仍然是相同的对象状态。您正在做的是分配引用arreglo一个新数组。

于 2013-10-11T02:12:49.610 回答