2016-02-13 18 views
5

kiedy pracowałem nad projektem kopalni, próbowałem wydrukować liczbę całkowitą od tablicy za pomocą następującego kodu:Drukowanie tablicę bez podania których jedna prowadzi prowadzi do ciąg kodu losowego

Random dice = new Random(); 
int wolfhealth[] = new int[]{dice.nextInt(15)+9}; 
System.out.println(wolfhealth); 

I przypadkowo zapomniał wskazać, jakie całkowitą chciałem wydrukować z tablicy liczb całkowitych, które prowadzą do niego drukując ten wiersz kodu:

[[email protected] 

już naprawił problem zmieniając 3. linia do

Moje pytanie brzmi: co dokładnie oznacza ta linia kodu - [[email protected]? Czy jest to jakiś unikalny identyfikator lub identyfikator dla tablicy?

Odpowiedz

7

To jest wyjście z domyślnej implementacji toString() z Object, jako "przesłonięte" dla obiektów tablicy.

Wyjście koduje typ i pamięci adres:

[ I @75b84c92 
▲ ▲ ▲ 
│ │ └─── hash code 
│ └─── of integer 
└─── array 
+0

Ostatni ciąg szesnastkowy to nie adres pamięci. To jest kod skrótu. – saka1029

+0

Dzięki, naprawiłem to. –

2

Tablice w Javie są referent typy. Oznacza to, że faktycznie przechowujesz odniesienie (adres) w pamięci stosu do innej pamięci w sterty. Pierwsze 2 symbole oznaczają, że jest to tablica int ([I), a druga oznacza, że ​​znajduje się ona w pewnym adresie w przestrzeni sterty (@ 75b84c92). Mam nadzieję, że to pomaga zrozumieć. Można również zobaczyć zawartość tablicy (głównie do celów debugowania) używając Arrays.toString(a)

2

Biorąc tablicę arr na przykład wszystkie trzy będą drukować ten sam rezultat

int[] arr = new int[20]; 

    System.out.println(arr); 
    System.out.println(arr.toString()); 
    System.out.println(String.format("%[email protected]%x", arr.getClass(), arr.hashCode())); 

Zasadniczo gdy System.out.println nazywa Metoda toStriing każdego obiektu jest wywoływana, więc efekt wywołania arr.toString daje również to samo, co daje drukowanie arr. Ostatnia instrukcja demonstruje tylko to, co robimy wewnątrz klasyString klasy tablicy.

Powiązane problemy