obtener el valor de retorno del método

sentirse libre :

corro siguientes códigos en Eclipse:

ArrayList<StringBuilder> list = new ArrayList<StringBuilder>();
ArrayList<Integer> alist = new ArrayList<Integer>();

// add some elements ti list
list.add(new StringBuilder("hello"));
list.add(new StringBuilder("2"));
list.add(new StringBuilder("hi"));
list.add(new StringBuilder("this"));

// add some elements to alist
alist.add(4);
alist.add(9);


//get method
StringBuilder a = list.get(3);
a.append(" is a good day");
int b = alist.get(1);
b = 7;

// print the list
System.out.println("LinkedList:" + list);
System.out.println("ArrayList:" + alist);

y el resultado está aquí

LinkedList:[hello, 2, hi, this is a good day]
ArrayList:[4, 9]

Parece que devuelve el método get una copia superficial del elemento de la lista (en el caso de StringBuilder) a la una, pero devuelve una copia profunda (en el caso de entero) en el b! ¿porqué sucedió? Do el método get devuelve una copia profunda o superficial de los elementos de la lista?

Eran :

getdevuelve una referencia al Listelemento, no una copia (ni profunda ni superficial).

En el primer fragmento que mutar el objeto referenciado por la variable a, por lo que el Listtambién se ve afectada:

StringBuilder a = list.get(3);
a.append(" is a good day");

En el segundo fragmento se asigna un nuevo valor a la variable b, que no afecta a la List:

int b = alist.get(1);
b = 7;

Para que el primer fragmento de comportarse como el segundo, debe escribir:

StringBuilder a = list.get(3);
a = new StringBuilder(" is a good day");

y Listno se verán afectados.

Por otro lado, no se puede hacer el segundo fragmento se comportan como el primero. Incluso si ha asignado el Listelemento a una Integervariable que no se puede llamar a cualquier método que mutan, ya que Integeres inmutable.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205361&siteId=1
Recomendado
Clasificación