In Java when we declare
short number=1024 * 1024 * 1024 * 1024;
The compiler will, in this case, evaluate the calculation (because it contains only constants) and try to assign the result to the variable. This calculation is done with type
int and only converted to
short on assignment, if at all possible.
In your case, the first calculation is too large to fit into a
1073741824). The second one will overflow the
int and end up in a range that
short supports (
0). So the assignment works in that case.
Mind you, you probably don't ever want to rely on these things in code.