2016-03-13 17 views
5

Perché un'assegnazione del formato int = int * double fornisce un errore e un'assegnazione del modulo int * = double non fornisce un errore (in Java)?Perché int = int * double restituisce un errore e int * = double no (in Java)?

Esempio:

public class TestEmp { 

    public static void main(String[] args) { 

     double e = 10; 
     int r = 1; 
     r *= e; 

     r = r * e; 
     System.out.println("De uitkomst van r :" + r); 

    } 
} 

r *= e è accettato e r = r * e non lo è. Perché?

risposta

9

r = r * e ti dà un errore perché il risultato di r * e è un double così ci sarà una perdita di precisione quando si memorizza in un int.

r *= e non ti dà un errore perché è zucchero sintattico per r = (int)(r * e) (source).

0

È perché r e e sono diversi tipi. Quando si utilizzano operatori di assegnazione composti come *=, i tipi sono convertiti dietro le quinte narrowly (implicitamente). L'operatore * non converte in modo implicito, pertanto è necessario convertire esplicitamente eseguendo il casting verso l'interno:

r = (int) (r * e); 
Problemi correlati