int 或者Integer所能接受的二进制数位数是1个符号位位+31个数值位,Integer.valueOf不依靠符号位判断正负,而是字符串中的+/-,所以传递的字符串中二进制数最多只能是31位。这一点最好的验证就是,对于1000...000(31个0),Integer.ValueOf无法表示出 -2^31。
你可以使用Long.valueOf(),再把结果强制转换成int,它会自动截取的,可以达到你想要的结果。