这是返回引用还是新对象?

时间:2013-10-11 02:07:59

标签: java methods reference-type

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

2 个答案:

答案 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分配一个新阵列。