Duvida sobre println de referências

Boa noite a todos, :wave: este é meu primeiro post não somente neste forum como também de todos que participei, caso não for aqui que poste ou o titulo esteja incorreto ou alguma outro coisa, agradecerei por instruções.

Bem, eu estou estudando java através de uma apostila, e em determinado momento, ele pede para fazer alguns exercicios onde preciso mostrar na tela um atributo de uma variavel, porém eu esqueci de colocar qual atributo deveria chamar e apenas coloquei a referencia System.out.print(c1); , apareceu como se fosse um codígo, EA31293, este código seria algo como o caminho dele para a memoria na JVM ?. Eu não tenho internet, estou passando por uns apertos mas assim que conseguir posto um print da execução do código, obrigado a todos :slightly_smiling_face:

1 curtida

Todo e qualquer objeto é identificado por um código que o identifica (univocamente) no projeto, isto é, é seu ID. Quando tu chama, ou melhor, passa um objeto para uma saída, como por exemplo o método println sem ‘invocar’ nenhum de seus atributos, o que é mostrado é esse ID e assume a seguinte formatação:

NomeDaClasse + @ + CodeObjectHexadecimal

Exemplo:

public class Teste {
	private long idTeste;
	private String nomeTeste;
	
	public Teste(long id, String nome){
		setIdTeste(id);
		setNomeTeste(nome);
	}
	
	/*
	* Métodos acessores e modificadores
	*/
	public void setIdTeste(long idTeste){
		this.idTeste = idTeste;
	}
	
	public long getIdTeste(){
		return idTeste;
	}
	
	public void setNomeTeste(String nomeTeste){
		this.nomeTeste = nomeTeste;
	}
	
	public String getNomeTeste(){
		return nomeTeste;
	}
	
	public static void main(String[] args){
		Teste t1 = new Teste(15L, "Teste01");
		Teste t2 = new Teste(1050L, "Teste89");
		
		System.out.println("O ID do objeto T1 (definido pela JVM): " + t1);
		System.out.println("O ID do objeto T1 (definido pelo usuário): " + t1.getIdTeste());
		System.out.println("Nome do Teste T1 (definido pelo usuário): " + t1.getNomeTeste());
		System.out.println("\n\n");
		System.out.println("O ID do objeto T2 (definido pela JVM): " + t2);
		System.out.println("O ID do objeto T2 (definido pelo usuário): " + t2.getIdTeste());
		System.out.println("Nome do Teste T2 (definido pelo usuário): " + t2.getNomeTeste());
	}
}

Rodando…

image

Fonte: Docs Oracle - java.lang.Object.

1 curtida

Essa é a implementação padrão do toString(), ela retorna:

<nome do pacote seguido do nome da classe> @ <System.identityHashcode em hexadecimal>

Você deve sobrescrever o método toString() que qualquer classe herda da classe Object.
@override
public String toString() {

  return ...;

}

PS: Também estou aprendendo Java ou reaprendendo depois de trabalhar algum tempo em Visual Basic e tentar trabalhar com C#.

Muito obrigado Staroski por tirar esta duvida :grinning:, mais a frente do ponto onde estou na apostila da Caelun FJ-11, falara sobre toString e uma classe parecida que serve para não precisar fazer aquele bolo de System.out.print();

Sei que faltou informações para que pudessem me ajudar, mas mesmo assim agradeço :slight_smile:

System.out.println("O ID do objeto T1 (definido pela JVM): " + t1);
System.out.println("O ID do objeto T1 (definido pelo usuário): " + t1.getIdTeste()); System.out.println("Nome do Teste T1 (definido pelo usuário): " + t1.getNomeTeste());

Aquele numero que eu havia mencionado era o ID i o numero é definido pela JVM. :smiley: Muito obrigado cara, me ajudou e muito.

Então, isso

é diferente disso: