/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public void testaTudo(){
List<ClasseTeste> lista = new ArrayList<ClasseTeste>();
ClasseTeste teste1 = new ClasseTeste("Joao", 100);
teste1.imprimir();
lista.add(teste1); // adiciona teste1 na lista
// note que a variável teste1 ainda está apontando para um objeto do tipo Classeteste
// o valor não some automaticamente
teste1.imprimir(); // imprime a mesma coisa que da primeira vez
ClasseTeste teste2 = new ClasseTeste("Pedro", 200);
teste2.imprimir();
lista.add(teste2); // adiciona teste2 na lista
// daí podemos fazer:
lista.get(0).imprimir(); // imprime o Joao, que foi o primeiro adicionado à lista
lista.get(1).imprimir(); // imprime o Pedro
ClasseTeste teste3 = lista.get(0); // coloca em teste3 o primeiro elemento da lista : Joao
// note que o elemento não é removido da lista
teste3.setValor(300);
teste3.imprimir(); // imprime o Joao, mas com valor 300
teste1.imprimir(); // também imprime Joao, e com valor 300
lista.get(0).imprimir(); // tambem imprime Joao, e com valor 300
// Nós não mudamos a referência da variável teste1, então
// tanto teste1 quanto teste3 e lista.get(0) retornam o mesmo objeto.
// inclusive, podemos fazer:
lista.get(0).setValor(500);
lista.get(0).imprimir(); // Joao, com valor 500
teste1.imprimir(); // Joao, com valor 500
}
{
new Ideone().testaTudo();
}
class ClasseTeste{
int valor;
public ClasseTeste
(String nome,
int valor
){ this.nome = nome;
this.valor = valor;
}
// permite alterar o valor
public void setValor(int novovalor){
this.valor = novovalor;
}
// exibe nome e valor
public void imprimir(){
System.
out.
println("Nome : " + this.
nome + " Valor : " + this.
valor); }
}
}