[RESOLVIDO] Porque repete os valores?

Boa tarde, não entendo pq as duas pessoas que eu criei mostram os mesmos resultados, sendo que eu coloquei valores diferentes.
Classe:

public Cartao(){
    this.pais="";
    this.numero=0;
}

public Cartao(String pais, int numero){
    this.pais=pais;
    this.numero=numero;
}
public void setPais(String pais){
    this.pais=pais;
}
public void setNumero(int n){
    this.numero=n;
}
public int getNumero(){
    return numero;
}
public String getPais(){
    return pais;
}
public String getNacionalidade(){
    if (pais=="Portugal"){
        return "Portugues";
    }
    else {
        return "Espanhol";
    }
}   

Main:

public static void main(String[] args) {
    Cartao p1 = new Cartao();
    Cartao p2 = new Cartao();
    p1.setNumero(123456789);
    p1.setPais("Portugal");
    p2.setNumero(987654321);
    p2.setPais("Espanha");
    System.out.println("Pessoa nº1:");
    System.out.println("Pais         : "+p1.getPais());
    System.out.println("Numero       : "+p1.getNumero());
    System.out.println("Nacionalidade: "+p1.getNacionalidade());
    System.out.println();
    System.out.println("Pessoa nº2:");
    System.out.println("Pais         : "+p2.getPais());
    System.out.println("Numero       : "+p2.getNumero());
    System.out.println("Nacionalidade: "+p2.getNacionalidade());

}

Posta o código completo das classes, não apenas os métodos.

public class CartaoCidadao {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Cartao p1 = new Cartao();
    Cartao p2 = new Cartao();
    p1.setNumero(123456789);
    p1.setPais("Portugal");
    p2.setNumero(987654321);
    p2.setPais("Espanha");
    System.out.println("Pessoa nº1:");
    System.out.println("Pais         : "+ p1.getPais());
    System.out.println("Numero       : "+ p1.getNumero());
    System.out.println("Nacionalidade: "+ p1.getNacionalidade());
    System.out.println();
    System.out.println("Pessoa nº2:");
    System.out.println("Pais         : "+ p2.getPais());
    System.out.println("Numero       : "+ p2.getNumero());
    System.out.println("Nacionalidade: "+ p2.getNacionalidade());
}  

}

package cartaocidadao;

public class Cartao {
private static String pais;
private static int numero;

public Cartao(){
    this.pais="";
    this.numero=0;
}

public Cartao(String pais, int numero){
    this.pais=pais;
    this.numero=numero;
}
public void setPais(String pais){
    this.pais=pais;
}
public void setNumero(int n){
    this.numero=n;
}
public int getNumero(){
    return numero;
}
public String getPais(){
    return pais;
}
public String getNacionalidade(){
    if (pais=="Portugal"){
        return "Portugues";
    }
    else {
        return "Espanhol";
    }
}   

}

Por esse motivo.
Deveria ser:
private String pais;
private int numero;

2 curtidas

O static funciona como uma variável global para a classe Cartao. Todas as instâncias de Cartao terão acesso ao mesmo espaço de memória.

1 curtida

Era exatamente isso! muito obrigado :wink:

Só mais uma coisa: neste codigo pode-me explicar o que é o objeto?

p1 e p2 são instâncias da classe Cartao, ou seja, objetos criados a partir de um tipo pré-definido que é o Cartao.