casting || *= - Warum müssen Javas + =, - =, * =, / = zusammengesetzte Zuweisungsoperatoren nicht umgewandelt werden?





5 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'
+= deutsch mathematische

Bis heute dachte ich, dass zum Beispiel:

i += j;

War nur eine Abkürzung für:

i = i + j;

Aber wenn wir das versuchen:

int i = 5;
long j = 8;

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

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




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




Das Problem betrifft hier das Gießen von Typen.

Wenn Sie Int und Long hinzufügen,

  1. Das int-Objekt wird in long umgewandelt und beide werden hinzugefügt, und Sie erhalten ein long-Objekt.
  2. long object kann jedoch nicht implizit in int umgewandelt werden. Das musst du also explizit machen.

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




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 kein Fehler beim Kompilieren des obigen Codes Incompatible type exception . In Java wird jedoch eine Incompatible type exception .

Um dies 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



Feiner Punkt hier ...

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

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

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

Siehe: diese Beschreibung des impliziten Castings

In diesem Fall sollten Sie aus Gründen der Übersichtlichkeit j in (int) typisieren.




Related