dae
vmorikawa, procure utilizar o mínimo possível de variáveis e/ou métodos staticos.
Quanto a passagem por valor ou referência o que acontece é o seguinte.
Passagem de parâmetro por referência:
É passada uma cópia dos bits que representa o objeto. Dessa forma quando alterará-se a
referência.As variáveis que referência o objeto
apontam para o mesmo endereço de memória.
Passagem por valor.
É passada uma cópia dos bits da variável. Dessa forma ao se alterar o valor apenas a
cópia será alterada.
Isso se dá com as variáveis primitivas e wrappers.
Creio que o que confundio vc foi a questão do String s = "valor". Na verdade quando se refere-se a valores String a coisa é um pouco diferente.
Por exemplo quando vc faz,
vc tem uma posição na memória com o valor: "valor".
Se vc fizer,
vc terá 2 posições na memória com: "valor" e "valor2" até o garbage passar :).
Caso vc crie outra variável String como em:
está usará aquele valor já na memória.
Se vc faz o seguinte:
String s = new String("valor2");
vc força a criação de outra posição na memória.
O código abaixo utiliza passagem de parâmetro por referência:
public class TesteReferencia {
public static void main( String[] args ) {
new TesteReferencia().start();
}
private void start() {
MinhaCor minhaCor = new MinhaCor("Vede");
System.out.println(minhaCor);
this.mudaCor(minhaCor);
System.out.println(minhaCor);
}
private void mudaCor(MinhaCor minhaCor) {
minhaCor.setCor("Branco");
}
class MinhaCor {
public MinhaCor(String cor) {
this.cor = cor;
}
private String cor;
public String getCor() {
return this.cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public String toString() {
return this.cor;
}
}
}