Java 这是否返回了引用或新对象?

Java 这是否返回了引用或新对象?,java,methods,reference-type,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"),

对象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
a de b
a de b
我以为abs只是对arreglo数组的第一个元素的引用

Carta abs = arreglo[0];
将对对象的引用存储在变量
abs
arreglo
数组的索引0处。如果随后更改数组中的元素,则
abs
变量仍在引用上一个对象

这个

打印第一个元素,然后执行以下操作

System.out.println(abs);
再打印一次。

这段代码

Carta abs = arreglo[0];
将对对象的引用存储在变量
abs
arreglo
数组的索引0处。如果随后更改数组中的元素,则
abs
变量仍在引用上一个对象

这个

打印第一个元素,然后执行以下操作

System.out.println(abs);
再打印一次。

这段代码

Carta abs = arreglo[0];
将对对象的引用存储在变量
abs
arreglo
数组的索引0处。如果随后更改数组中的元素,则
abs
变量仍在引用上一个对象

这个

打印第一个元素,然后执行以下操作

System.out.println(abs);
再打印一次。

这段代码

Carta abs = arreglo[0];
将对对象的引用存储在变量
abs
arreglo
数组的索引0处。如果随后更改数组中的元素,则
abs
变量仍在引用上一个对象

这个

打印第一个元素,然后执行以下操作

System.out.println(abs);
再打印一次

为什么我会得到这个输出:

a de b 
a de b
a de b
a de b
我以为abs只是对arreglo数组第一个元素的引用

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

为什么我会得到这个输出:

a de b 
a de b
a de b
a de b
我以为abs只是对arreglo数组第一个元素的引用

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

为什么我会得到这个输出:

a de b 
a de b
a de b
a de b
我以为abs只是对arreglo数组第一个元素的引用

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

为什么我会得到这个输出:

a de b 
a de b
a de b
a de b
我以为abs只是对arreglo数组第一个元素的引用


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

您已经说过
System.out.println(abs)两次。它应该做什么?你说的是
System.out.println(abs)两次。它应该做什么?你说的是
System.out.println(abs)两次。它应该做什么?你说的是
System.out.println(abs)两次。它应该做什么?