如果不是昨天代码出现问题,我可能不会注意到Double与double的区别使用;
问题1:一个int类型的数据如果强制转换是可以转成double类型的,但是我在项目中不小心把double写成了Double(主要问题是我对Double和double的使用不了解,混淆了);
于是报错:cannot cast ‘int’ to ‘java.lang.Double’,例子如下:
问题2:项目检查中发现,一个double类型的数据是可以转换成Double,并且不会报错
double smD = 2.22; System.out.println((Double)smD); 复制代码
实际上,在jdk1.5以上,(自动拆箱和自动装箱)Double是double的包装类,如果把double类型数据转换成Double,那么 这个数据就可以使用Double中的所有方法 ;
自动装箱和自动拆箱:
Double d =new Double(dou)可将double基本数据类型装箱为Double包装类 double dou =d.doubleValue()可将Double的包装类拆箱为基本数据类型 复制代码
由于基本数据类型转化不熟悉,所以回顾一下,做个小总结。
定义:数字表示范围小的数据类型可以自动转化成范围大的数据类型;
数据溢出问题:两个int相乘,结果超出int表示范围。
解决办法:一般把第一个数据转换成范围大的数据类型再和其他数据类型进行运算;
问题: int count = 100000000; int price = 1999; long totalPrice = count * price; 输出结果为负数; 解决: int count = 100000000; int price = 1999; long totalPrice = (long) count * price; 复制代码
int ii = 300; byte b = (byte)ii; 复制代码
300已经超过byte类型表示的范围,所以会转化成一个毫无意义的数字。
long count = 100000000; int price = 1999; long totalPrice = price * count; price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。 复制代码