double doubleResult = Math.pow(2, 31); ----- doubleResult 为 2.147483648E9
int result = (int)doubleResult; ----- result 为 2147483647
double可以有52位二进制数位,比int精确得多,所以可以精确地表示2的31次方。但int是有符号32位整数,能表示的最大整数是正2的31次方减1。Java里,浮点数转整数的时候,如果那个浮点数比整数类型能表示的最大值还大,那么结果就是那个整数类型的最大值。