Warum benötigen die + =, - =, * =, / = Verbundzuweisungsoperatoren von Java nicht das Casting?



Answers

Ein gutes Beispiel für dieses Casting ist die Verwendung von * = oder / =

byte b = 10;
b *= 5.7;
System.out.println(b); // prints 57

oder

byte b = 100;
b /= 2.5;
System.out.println(b); // prints 40

oder

char ch = '0';
ch *= 1.1;
System.out.println(ch); // prints '4'

oder

char ch = 'A';
ch *= 1.5;
System.out.println(ch); // prints 'a'
Question

Bis heute dachte ich zum Beispiel:

i += j;

ist nur eine Abkürzung für:

i = i + j;

Aber was, wenn wir das versuchen:

int i = 5;
long j = 8;

Dann ist i = i + j; kompiliert nicht, aber i += j; wird gut kompilieren.

Bedeutet das, dass in der Tat i += j; ist eine Abkürzung für so etwas i = (type of i) (i + j) ?




Subtiler Punkt hier ...

Es gibt eine implizite Typumwandlung für i+j wenn j ein Doppel ist und i ein Int ist. Java konvertiert IMMER eine ganze Zahl in eine doppelte, wenn zwischen ihnen eine Operation stattfindet.

Zur Klarstellung von i+=j wobei i eine ganze Zahl ist und j ein Doppel ist, kann als beschrieben werden

i = <int>(<double>i + j)

Siehe: diese Beschreibung des impliziten Castings

Vielleicht möchten Sie in diesem Fall zur besseren Übersicht j in (int) schreiben.




Das Problem ist hier das Gießen.

Wenn Sie int hinzufügen und lang,

  1. Das Int-Objekt wird zu lange geworfen und beide werden hinzugefügt und Sie erhalten ein langes Objekt.
  2. Langes Objekt kann jedoch nicht implizit in int umgewandelt werden. Also musst du das explizit tun.

Aber += ist so codiert, dass es Casting eingibt. i=(int)(i+m)




Ja,

im Grunde, wenn wir schreiben

i += l; 

der Compiler konvertiert dies in

i = (int)(i + l);

Ich habe gerade den .class überprüft.

Wirklich eine gute Sache zu wissen




Manchmal kann eine solche Frage in einem Interview gestellt werden.

Zum Beispiel, wenn Sie schreiben:

int a = 2;
long b = 3;
a = a + b;

Es gibt keine automatische Typumwandlung. In C ++ wird es keinen Fehler geben, den obigen Code zu kompilieren, aber in Java erhalten Sie so etwas wie Incompatible type exception .

Um es zu vermeiden, müssen Sie Ihren Code folgendermaßen schreiben:

int a = 2;
long b = 3;
a += b;// No compilation error or any exception due to the auto typecasting





Related