2013-05-03 20 views
5

Ho appreso che i+=2 è lo stenoscopio di i=i+2. Ma ora ne dubito. Per il codice seguente, la conoscenza di cui sopra vale non va bene:Operatore di assegnazione manuale corta, + =, vero significato?

byte b=0; b=b+2; //Error:Required byte, Found int

Il codice di cui sopra è giustificabile, come 2 è int tipo e l'espressione restituisce int valore.

Ma, il seguente codice funziona benissimo:

byte b=0; b+=2; //b stores 2 after += operation

Questo mi costringe a dubitare che l'operatore += breve mano è un po 'più di quanto io conosca. Per favore, illuminami.

+0

Vedere: http://stackoverflow.com/questions/7038012/typecasting-with-shorthand-operators –

+2

Non utilizzare nel rispondere quando esiste una buona risposta. Controlla [questo] (http://stackoverflow.com/questions/8710619/java-operator). Questa domanda è trattata qui. – Gamb

risposta

10

In caso di dubbio, si può sempre controllare il linguaggio Java Specification. In questo caso, la sezione pertinente è 15.26.2, Compound Assignment Operators.

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

Quindi eri quasi corretto, tranne che è stato aggiunto anche un cast. Nel tuo caso: b+=2; si qualifica a b=(byte)(b+2);

+0

chiaro e conciso +1 –

+0

Secondo questo 2 non sarebbe ancora considerato un int? Riempiendo i segnaposto, ho letto che b = (byte) b + 2; –

+0

Quindi 'i + = 2' si qualifica per' i = (tipo di i) (i + 2) '. Grazie :) –

0

Provenendo da uno sfondo C++, posso tentare di affermare che il concetto è simile. L'operatore += è definito come un metodo dell'oggetto alla sua sinistra, passando l'oggetto alla sua destra come argomento. Ciò rende banale per lo scrittore della lingua introdurre elementi come il typecasting e le correzioni di compatibilità. L'unica cosa è che, per quanto ne so, Java non consente all'utente di sovraccaricare le funzioni dell'operatore

Problemi correlati