为什么不能直接将数字赋值给BigDecimal类型变量
我们可以直接给Integer类型的变量赋值int字面量,写法如下:
Integer a= 12;
但是以下给BigDecimal类型变量直接赋值int字面量的写法是不合法的:
BigDecimal b =12;
具体原因
- Java 5及以上版本支持自动装箱机制,该机制仅允许基本数据类型自动转换为它对应的包装类对象:
int类型的对应包装类就是Integer,所以上述给Integer a直接赋值int字面量12的操作,本质是JVM自动完成了装箱逻辑,不需要手动处理。 BigDecimal是java.math包下提供的用于高精度运算的普通类,不属于任何基本数据类型的包装类,JVM没有也不会提供从int到BigDecimal的自动装箱逻辑,因此直接赋值会直接触发编译报错。
正确赋值写法参考
// 方式1:使用valueOf静态方法,推荐用于整型、小数值场景 BigDecimal b = BigDecimal.valueOf(12); // 方式2:传入字符串构造,推荐用于浮点高精度场景,避免原生浮点精度丢失 BigDecimal c = new BigDecimal("12.34");
内容的提问来源于stack exchange,提问作者Nisal Jayathilaka
相关产品推荐
相关产品推荐

