Metoda toString

0

Witam. Piszę program i dziwi mnie jedna rzecz. Mianowicie mam takie dwie proste klasy:

public class Glowna {


	public static void main(String[] args) {

		Budynek a = new Budynek("Budynek");
		
		System.out.println(a.pietroTab[0].pomTab[0].toString());
	}

}
 

i tam te wszystkie klasy, ale to nie ważne. Ważna jest klasa Pomieszczenie:

public class Pomieszczenie {
	
	String nazwaPom;
	
	
	Pomieszczenie(String nazwa, Integer x) {
		
		nazwaPom = nazwa + ' ' + x;
	}
	
	/*public String toString() {
		
		return nazwaPom;
	}*/
}

Czemu gdy nie przesłonię metody toString() to dostaję w wyniku coś takiego: Pomieszczenie@13bde392
Zaś gdy to zrobię dostaję dobry wynik, czyli np: Pomieszczenie 0. Czemu w tym pierwszym wyniku dostaję adres? Przecież zmiennej nazwaPom przyporządkowuję nazwę nazwaPom = nazwa + ' ' + x; i ten x zostaje zamieniony na String. Przynajmniej tak mi się wydaje.

1

Metoda toString() to nie jest żadna magiczna metoda, tylko metoda, która jest zdefiniowana w klasie java.lang.Object z której dziedziczą wszystkie inne klasy. Implementacja toString() w klasie Object zwraca Stringa typu <nazwa klasy="klasy"> + '@' + <jakaś liczba>, przy czym nie jestem pewien czy ta liczba to koniecznie jakiś adres i czyj to adres, bo jak wiadomo w Javie obiekty mogą się przemieszczać w czasie ich życia - związane jest to z mechanizmem odśmiecania.

PS - w dokumentacji Javy w opisie metody Object.toString http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

A więc to nie żaden adres tylko domyślny hashCode.

Do domyślnego hashCode zawsze można się dobrać poprzez funkcję: http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#identityHashCode(java.lang.Object)

1 użytkowników online, w tym zalogowanych: 0, gości: 1