How does it manage to keep max_value of integer,which is 2^31 – 1?
它实际上没有. f的值是2147483648.
Otherwise,one of the following two cases must be true:
The value must be too small (a negative value of large magnitude or negative infinity),and the result of the first step is the smallest representable value of type int or long.
The value must be too large (a positive value of large magnitude or positive infinity),and the result of the first step is the largest representable value of type int or long.
通过使数字更大,您可以轻松地看到这一点:
float f = Integer.MAX_VALUE;
f = f * 1000;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((int)f); // 2147483647
或者通过铸造来代替,显然不需要在同一点夹紧:
float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((long)f); // 2147483648