理论知识:
一: 基本数据类型可以相互转换,大到小不用强转,小到大需要强转,有可能会损失精度
int a = 10;
double b = a; //小到大,隐式转换
float c1 = 10.0; // 编译出错
float c2 = (float) 10.0; // 大到小,强制转换
二:java 中,整数默认为int,浮点数默认为double
所以上述float c1 = 10.0 是编译出错的,10.0 是double类型
三:d/D f/F 的使用,显示的告诉编译器这是一个double、float类型的浮点类型,不是默认的类型
double b1 = 10; //1
double b2 = 10.0;//2
double b3 = 10d;//3
double b4 = 10D;//4
float c2 = 10;//5
float c3 = (float) 10.0;//6
float c4 = 10f;//7
float c5 = 10F;//8
float c6 = 10.0f; //9
float c7 = 10.0F; //10
上述定义都可以成功
第1 和 5 行 是吧int类型的整数,隐式转型为double float
第2 和 6 是正常的定义,结合上述第二条,10.0默认就是double类型,而double > float ,所以float需要强转
第3 4 7 8 条,就使用了d/D f/F ,首先说明 d/D f/F 大小写没有区别;这两个一般用于整数,表示这个整数是浮点型,而且是对应的double 或者float型
第9 10 条,也说明了f/F 是告诉编译器,这里是float类型的浮点数,不会编译成double 类型
四:包装类的使用
首先要知道:
1:基本数据类型和包装类在jdk1.5 之后就可以自动装箱和拆箱,即可以相互无损转换,而且只能是一对一的自动拆箱和装箱
2:由于包装类是对象,所以在各个包装类之间无法进行类型转换
Float d1 = 10;//1 编译出错
Float d2 = 10.0; //2 编译出错
Float d3 = (Double)10.0; //3 编译出错
Double f1 = 10; //4 编译出错
Double f2 = 10.0; // 编译成功
原因:
1:第1 是因为10 默认是int类型,可以自动装箱为Integer ,但是无法自动装箱为Float,第二条同理,10.0 默认是double类型
2:第3 是因为包装类之间无法强制转换
3:第4 条 因为10 默认是int类型,不可以自动装箱为Double
结合三即可判断下列定义是正确的,满足自动装箱和拆箱;
Double d1 = 10d;
Double d2 = 10D;
Float f1 = 10f;
Float f2 = 10F;
以Double 和double为例的正确使用:
Double d1= new Double("1");
Double d2= new Double(2.3);
Double d3 = Double.valueOf(10.1);
Double d4 = 10.0;//自动装箱
double d5 = new Double("1");//自动拆箱