首页 新闻 赞助 找找看

Java Object转Double(double)关于null值的问题

0
悬赏园豆:100 [已解决问题] 解决于 2019-06-15 22:00

先看下面的代码
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", 36D);
Object object = map.get("key2");
// 转为Double
Double d1 = (Double) object;
System.out.println(d1); // null
// 转为double
double d2 = object == null ? 0 : Double.parseDouble(object.toString());
System.out.println(d2); // 0.0
Double d3 = d1 + d2; // or double d3 = d1 + d2; NullPointerException
System.out.println(d3);
}
目前我使用两种转换方式
1)转为 Double ,object 为null时,d1 也为 null
2)转为 double ,object 为null时,d2 为 0.0

对于第一种 d1,假若需要使用d1的值去计算,则会空指针异常
对于第二种 d2,则需要对object判空并赋零值,把原来的 null 改为 0 了。

所以有没有其他更好的实现方式呢?还是使用 d1或d2?

蔡昭凯的主页 蔡昭凯 | 初学一级 | 园豆:112
提问于:2019-06-04 07:38
< >
分享
最佳答案
0

Double是double的封装类,是对象,允许null
所以Double d1 = (Double) object;虽然不报错,但是d1为null,这时候虽然不会报错,但是还是要判断一下,
double d2 =(double) object ;会报错,因为double是基本类型,只允许常量
一般程序中对象是否为null都是程序自己判断的,可以这样写:
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", 36D);
Object object = map.get("key2");
// 转为Double
Double d1 = (Double) (object == null ? 0D: object);
System.out.println(d1);
// 转为double
double d2 = (double)(object == null ? 0D: object);
System.out.println(d2);
Double d3 = d1 + d2;
System.out.println(d3);
}
}
一般来说,这种通用的类型转换都会写在程序工具类中,比如:
public static Double parseDouble(Object object){
return (Double)(object == null ? 0D: object);
}
用的时候直接调工具类的方法就行了:
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", 36D);
Object object = map.get("key");
// 转为Double
Double d1 = parseDouble(object);
System.out.println(d1);
// 转为double
double d2 = parseDouble(object);
System.out.println(d2);
Double d3 = d1 + d2;
System.out.println(d3);
}

收获园豆:100
小光 | 小虾三级 |园豆:1766 | 2019-06-06 10:30
其他回答(3)
0

可以保留 null,也可以赋值 0,具体看需求,但是不能让程序报错

三人乐乐 | 园豆:4819 (老鸟四级) | 2019-06-04 09:26
0

null判断不建议在这里检测!你可以在传参时直接不能为null!

学者人生 | 园豆:4 (初学一级) | 2019-06-05 11:36
0

1.如果是金钱相关全部转成BigDecimal来做,用自带的加减乘除方法计算,记得参数要写精度和截取方式。
2.必须使用Double:
Double封装类型,支持为null,如果要计算只能处理一下null,不然肯定要报错的。
double基本类型,不支持null,可直接计算。

只会一点java | 园豆:417 (菜鸟二级) | 2019-06-10 09:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册