对象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的第一个元素的引用
答案 0 :(得分:2)
这段代码
Carta abs = arreglo[0];
将对arreglo
数组的索引0处的对象的引用存储在变量abs
中。如果随后更改了数组中的元素,abs
变量仍然引用前一个对象。
此
System.out.println(abs);
打印第一个元素,然后执行
System.out.println(abs);
再次将其打印出来。
答案 1 :(得分:1)
为什么我得到这个输出:
a de b a de b
我认为abs只是对数组arreglo的第一个元素的引用。
abs
它是对Carta
实例的引用。不是数组arreglo
。因此,当您不修改该实例时,abs
仍然是相同的对象状态。你正在做的是为参考arreglo
分配一个新阵列。