2011-12-15 14 views
5

Rozważ poniższy fragment kodu w Javie. Wiem, że oświadczenie temp[index] = index = 0; w poniższym fragmencie kodu jest w zasadzie niedopuszczalne, ale może być konieczne w niektórych sytuacjach, a zatem istnieje potrzeba poznania.Łańcuchowanie przypisania tablicy w Javie

package arraypkg; 

final public class Main 
{ 
    public static void main(String... args) 
    { 
     int[]temp=new int[]{4,3,2,1}; 
     int index = 1; 

     temp[index] = index = 0; 
     System.out.println("temp[0] = "+temp[0]); 
     System.out.println("temp[1] = "+temp[1]); 
    } 
} 

Wyświetla on następujące dane wyjściowe na konsoli.

temp[0] = 4 
temp[1] = 0 

Nie rozumiem tego oświadczenia temp[index] = index = 0;. W jaki sposób temp[1] zawiera 0? W jaki sposób występuje to przypisanie?

+0

Czego można się spodziewać po "temp [1]"? –

+0

Myślę, że to całkiem jasne, że spodziewa się, że 'index' po raz pierwszy stanie się' 0' tworząc 'temp [indeks]' równoważny 'temp [0]', tak że tylko pierwszy element zostanie zmodyfikowany. –

+4

Tutaj powinna być zawarta wiadomość take home, nie należy pisać kodu w ten sposób. Znajomość skrzypcowych kawałków Javy jest szanowaną umiejętnością, ale w większości bezużyteczna. Tego typu kod po prostu nie powinien istnieć, a jego odnalezienie powinno zostać natychmiast wyeliminowane. – rfeak

Odpowiedz

8

Przypisanie zostało wykonane (temp[index] = (index = 0)), skojarzenie prawostronne.

Ale najpierw wyrażenie temp[index] jest obliczane dla zmiennej LHS. W tym czasie index jest nadal 1. Następnie wykonuje się RHS (index = 0).

+1

+1 - Pierwsza osoba, która bezpośrednio zajmie się pytaniem, o które pyta OP (o ocenę LHS względem RHS). –

+1

Dokument potwierdzający: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.1 –

1

Twoje oświadczenie przypisane zero. Instrukcja temp [index] = index = 0 zapisała zero w indeksie AND w temp [indeks]. Właśnie to oznaczało. Uczynić wszystkie zmienne na lewo od operatora przypisania 0.

1

Co robi, że linia jest powiedzieć, że temp[index] powinna wynosić index po index jest przypisana wartość 0.

Dlatego ta składnia jest w większości niedopuszczalna. Trudno to odczytać i większość ludzi tego nie rozumie.

1

Użytkownik przypisał zarówno temp [1], jak i indeks do "0" , czyli od lewej do prawej. think ass temp [indeks/* * /]

Powiązane problemy