转载

Double和double的使用区别,避坑

如果不是昨天代码出现问题,我可能不会注意到Double与double的区别使用;

问题1:一个int类型的数据如果强制转换是可以转成double类型的,但是我在项目中不小心把double写成了Double(主要问题是我对Double和double的使用不了解,混淆了);

于是报错:cannot cast ‘int’ to ‘java.lang.Double’,例子如下:

Double和double的使用区别,避坑

根据这个错误可以看到Double是一个java类:java.lang.Double;而double是基本数据类型

问题2:项目检查中发现,一个double类型的数据是可以转换成Double,并且不会报错

double smD = 2.22;
        System.out.println((Double)smD);
复制代码

实际上,在jdk1.5以上,(自动拆箱和自动装箱)Double是double的包装类,如果把double类型数据转换成Double,那么 这个数据就可以使用Double中的所有方法

Double和double的使用区别,避坑

自动装箱和自动拆箱:

Double d =new Double(dou)可将double基本数据类型装箱为Double包装类
double dou =d.doubleValue()可将Double的包装类拆箱为基本数据类型
复制代码

2.Double和double的区别

  • Double是一个类,创建对象,存放在堆中;
  • double是一种基本数据类型,创建引用,存放在栈中;
  • Double是对double类型的封装, 内置很多方法可以实现String到double的转换,以及获取各种double类型的属性值(MAX_VALUE,SIZE等)
  • Double基本方法:
Double和double的使用区别,避坑
Double和double的使用区别,避坑

3.java基本数据类型

Double和double的使用区别,避坑

由于基本数据类型转化不熟悉,所以回顾一下,做个小总结。

3.1自动类型转化

定义:数字表示范围小的数据类型可以自动转化成范围大的数据类型;

Double和double的使用区别,避坑

数据溢出问题:两个int相乘,结果超出int表示范围。

解决办法:一般把第一个数据转换成范围大的数据类型再和其他数据类型进行运算;

问题:
int count = 100000000;
int price = 1999;
long totalPrice = count * price;
输出结果为负数;

解决:
int count = 100000000;
int price = 1999;
long totalPrice = (long) count * price;

复制代码

3.2强制类型转化

强制显示把一个数据类型转化成另一个数据类型,注意小心数据溢出:

int ii = 300;
byte b = (byte)ii;
复制代码

300已经超过byte类型表示的范围,所以会转化成一个毫无意义的数字。

3.3类型提升

所谓类型提升就是指在多种不同数据类型的表达式中,类型会自动向范围表示大的值的数据类型提升

long count = 100000000;
int price = 1999;
long totalPrice = price * count;
price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。
复制代码
原文  https://juejin.im/post/5d744e406fb9a06b1b19e55f
正文到此结束
Loading...