operator - java how to cast an object




Perché Java+=,-=,*=,/= gli operatori di assegnazione composti richiedono il casting? (7)

Fino ad oggi, ho pensato che ad esempio:

i += j;

Era solo una scorciatoia per:

i = i + j;

Ma se proviamo questo:

int i = 5;
long j = 8;

Quindi i = i + j; non verrà compilato ma i += j; compilerà bene.

Significa che in effetti i += j; è una scorciatoia per qualcosa di simile a questo i = (type of i) (i + j) ?


è necessario eseguire il cast da long a int explicitly in caso di i = i + l quindi verrà compilato e restituito l'output corretto. piace

i = i + (int)l;

o

i = (int)((long)i + l); // this is what happens in case of += , dont need (long) casting since upper casting is done implicitly.

ma nel caso di += funziona semplicemente perché l'operatore fa implicitamente il casting del tipo da tipo di variabile destra a tipo di variabile sinistra, quindi non è necessario eseguire il cast esplicito.


A volte, una tale domanda può essere posta in un colloquio.

Ad esempio, quando scrivi:

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

non esiste un typecasting automatico. In C ++ non ci sarà alcun errore nella compilazione del codice sopra, ma in Java si otterrà qualcosa come l' Incompatible type exception .

Quindi per evitarlo, devi scrivere il tuo codice in questo modo:

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

Il problema qui riguarda il casting di tipo.

Quando aggiungi int e long,

  1. L'oggetto int è castato a lungo e entrambi vengono aggiunti e ottieni oggetti lunghi.
  2. ma l'oggetto lungo non può essere implicitamente convertito in int. Quindi, devi farlo esplicitamente.

Ma += è codificato in modo tale da digitare casting. i=(int)(i+m)


La differenza principale è che con a = a + b , non si sta verificando il typecasting, e quindi il compilatore si arrabbia con te per non aver eseguito un typecasting. Ma con a += b , ciò che realmente sta facendo è typecasting b con un tipo compatibile con a . Quindi se lo fai

int a=5;
long b=10;
a+=b;
System.out.println(a);

Quello che stai facendo davvero è:

int a=5;
long b=10;
a=a+(int)b;
System.out.println(a);

Ottima domanda La specifica della lingua Java conferma il tuo suggerimento.

Ad esempio, il seguente codice è corretto:

short x = 3;
x += 4.6;

e ha come risultato che x ha il valore 7 perché è equivalente a:

short x = 3;
x = (short)(x + 4.6);

Punto sottile qui ...

Esiste un typecast implicito per i+j quando j è un double e i è un int. Java SEMPRE converte un numero intero in un doppio quando c'è un'operazione tra di loro.

Per chiarire i+=j dove i è un intero e j è un doppio può essere descritto come

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

Vedi: questa descrizione del casting implicito

Potresti voler digitare j to (int) in questo caso per chiarezza.


Un buon esempio di questo casting sta usando * = o / =

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

o

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

o

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

o

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




assignment-operator