Why does the augmented assignement operator in Java give a different result?

Consider the following piece of code:

class Converter {
    public static void main(String args[]) {
        byte num = 1;
        num = num * 2.5;
        System.out.println("Result is: " + num);
    }
}

The compiler throws the following error:

error: incompatible types: possible lossy conversion from double to the byte at line 1

If I change the second line of the main() method and I use the *= shorthand operator:

class Converter {
    public static void main(String args[]) {
        byte num = 1;
        num *= 2.5;
        System.out.println("Result is: " + num);
    }
}

The code compiles and runs successfully with the output:

Result is: 2

Why the *= shorthand operator is behaving differently from the full expression num = num * 2.5?

Answer

From the JLS compound assigment operator documentation, you can see the following example :

For example, the following code is correct:

short x = 3;
x += 4.6;

and results in x having the value 7 because it is equivalent to:

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

It simply auto cast the result by default.

PS : In this other answer I tried to explain the reason you need to cast an operation like the following using the JLS

short x = 3;
x = x + 1; //Won't compile

It is realativly new so I am open to suggestion there.