文章目录
1. 包装类型不能直接强转
// 强转会报如下错误
// class java.lang.Integer cannot be cast to class java.lang.Long
Integer number = 10;
// 这样的强转是不对的
Long number2 = (Long)number;
2. 正确的转换方式
2.1 int 转 long
int a = 10;
long b = (long)a;
2.2 long 转 int
long a = 10L;
int b = (int)a;
2.3 Integer 转 Long
Integer a = 10;
Long b = a.longValue();
2.4 Long 转 Integer
Long a = 10L;
Integer b = a.intValue();
或
Long a = 10L;
Integer b = Math.toIntExact(a);
3. Map 存入 Long 变为 Integer 的原因
对于 Map<String,Object> 由于我们使用 Object 类型来接收数字,map并不知道我们传入的是 Long 还是 Integer 。所以 Map 会根据我们传入的数值的大小来判断。
也就是说如果你传入的数值的大小是在 Integer.MIN_VALUE、 Integer.MAX_VALUE 之间,Map 就认为是 Integer 类型,如果超过了这个范围就认为是 Long 类型。
4. 解决强转 Long 报错问题
由于不确定是 Integer 还是 Long,而且包装类型之间强转会报错。所以我们就不能进行强转,可以按照如下方法操作
// 不直接强转先用 Object 接收
Object number = map.get("number");
// 下面两种二选一
Long longNumber = Long.valueOf(number.toString());
Long longNumber = Long.valueOf(String.valueOf(number));