Duvida sobre construtor

5 respostas
P

uma duvida porque o valor de s[0] ficou “Coors” já que o metodo
é void e a variavel foi criada no construtor…

Não entendi …se alguém puder me ajudar ???

abs

public class TadKebab{
    public static void main(String argv[]){
	new TadKebab();
    }
    private TadKebab(){
	String[] Sa = {"Sam Smith", "John Smith"};
	getName(Sa);
	System.out.print(Sa[0]);
    }

    public void getName(String s[]){
	s[0]="Coors";	
    }
}

resultado:

Coors

5 Respostas

T

Quando você cria o vetor dentro do construtor

E depois o passa como parâmetros para getName(Sa), o que você está passando é o endereço de memória desse vetor, então dentro do getName você faz

você altera o vetor criado no construtor.

Sacou?

Ismaels

Cara, no método getName você definiu que a primeira posição do array que é passado no parâmetro vai receber o valor “Coors”. Você está passando um Array, que é um objeto e portanto o que você fizer com ele dentro do método irá se refletir fora do método também.

eberson_oliveira

Olá,

O Java trabalha com passagem de valores por referência.
Quando vc passou a variável Sa para o metodo getName as variaveis s e Sa passaram a compartilhar o mesmo endereço de memória de forma que as alterações feitas em uma delas terá o mesmo efeito na outra.

public class TadKebab{  
     public static void main(String argv[]){  
     new TadKebab();  
     }  
     private TadKebab(){  
     String[] Sa = {"Sam Smith", "John Smith"};  
     getName(Sa);  
     System.out.print(Sa[0]);  
     }  
   

     public void getName(String s[]){  
     s[0]="Coors";     
     }  
 }  
   
 resultado:  
   
 Coors

Para que não fosse alterada vc deveria ter passado:

getName( Sa[0].clone() ); // mas para que isso funcione é necessário que o objeto passado implemente a interface Cloneable
G

Como o colega lhe respondeu, você passa a referência do vetor de String (Sa) com parâmetro para o método getName, o qual modifica sua primeira célula. Sendo assim, após a chamada ao método, teremos:
Sa [0] = “Coors” e Sa[1] = “John Smith” no término da chamada de getName(Sa). Em seguida a impressão.

P

ok…obrigado pelo retorno…

abs

Criado 19 de agosto de 2008
Ultima resposta 19 de ago. de 2008
Respostas 5
Participantes 5