5

Why does an assignment of the form int = int * double give an error, and an assignment of the form int *= double does not give an error (in Java)?

Example:

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 is accepted and r = r * e isn't. Why?

paisanco
  • 4,032
  • 6
  • 29
  • 31
Marco de Boer
  • 149
  • 1
  • 7

2 Answers2

10

r = r * e gives you an error because the result of r * e is a double so there will be a loss of precision when you store it in an int.

r *= e does not give you an error because it is syntactic sugar for r = (int)(r * e) (source).

DanielGibbs
  • 9,503
  • 9
  • 69
  • 115
0

It is because r and e are different types. When using compound assignment operators such as *=, the types are narrowly converted behind the scenes (implicitly). The * operator does not implicitly convert, thus you must explicitly convert by casting inward:

r = (int) (r * e);
codingbash
  • 972
  • 1
  • 8
  • 21