Java Map<String,Object> 接收 Long 类型数据变为 Integer 类型,强转 Long 报错

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));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值