java基本数据类型自动转换以及强制转型实例源码说明隐式转换与显式传唤:
java数据类型自动转换:
java自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。
实例说明: 将整型常量直接赋值给byte, short,char等类型变量,不用进行强制类型转换,但是不能超出其表数范围
Short b = 12; //合法的转换
short b = 1234567; //非法的操作,超出了范围
java数据类型强制类型转换(Cast):java强制类型转换,用于显式的转换一个数值的类型. 在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
强制类型转换的语法格式:“(type)var”,运算符“()”的type表示把值var想要转换成的目标数据类型。
实例:double x = 3.14;
int nx = (int)x; //值为3
charc = ‘a’;
intd = c+1;
System.out.println(d);
System.out.println((char)d);
假如要将一种java类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为不同的数值。
例如: int x = 300;
byte bx = (byte)x; //转换得到的值为44
不能在布尔类型和任何数值类型之间做强制类型转换。
如果需要把布尔类型转换成一个数字该怎么办呢?
使用三木运算符:
Boolean b = true;
Int a = (b)?1:0;
基本类型转化时常见错误和问题:
1. 操作比较大的数时,要留意是否溢出,尤其是整数操作时。
int money = 1000000000; //10亿
int years = 20;
int total = money*years; //返回的是负数
long total1 = money*years; //返回的仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失
long total2 = money*((long)years); //先将一个因子变成long,整个表达式发生提升。全部用long来计算。
|
L和l 的问题:
1. 不要命名名字为l的变量
2. long类型使用大写L不要用小写。
|
java强制转化实例源码
|