Java基础:类型转换
前言
-
由于Java是强类型语言,所以要进行有些运算的时候需要进行类型转换;
-
运算中,不同类型的数据先转化为同一类型,然后在进行运算;
-
强制类型转换
-
自动类型转换
强制转换与自动转换详解
1.强制转换格式 :(类型)变量名,高----低
2.自动转换:低—高
注意点:
1.不能对布尔值进行转换;
2.不能把对象类型转化为不相同的类型;
3.在把高容量转化为低容量的时候,强制转换;
4.转换的时候可能存在内存溢出,或者精度问题。
示例:
public class Demo5{
public static void main(String[] args){
int i = 128;
// byte b = i; 错误!!!由高到低需使用强制转换
byte b = (byte)i;
// 强制转换 (类型)变量名
double d = i;
// 由低到高,自动转换 ,d = 128.0
char c ='a';
int num = c + 1;
System.out.printIn(num);
// 98 ,发生了自动转换
System.out.printIn((char)num);
// b ,强制转换为字符型
}
}
1.内存溢出
代码如下(示例):
public class Demo5{
public static void main(String[] args){
int i = 128;
// byte b = i; 错误!!!由高到低需使用强制转换
byte b = (byte)i;
// b = -128
// 由于 byte 类型的范围是 -128~127 ,因此转换时出现内存溢出现象
}
}
2.精度丢失
代码如下(示例):
public class Demo5{
public static void main(String[] args){
System.out.printIn(23.7); //23.7
System.out.printIn((int)23.7); //23,出现精度丢失
System.out.printIn((int)-45.89f); //-45,出现精度丢失
3.操作比较大的数时,注意溢出问题
代码如下(示例):
public class Demo6{
public static void main(String[] args){
int money = 10_0000_0000;
//1000000000 JDK7新特性,数字之间用下划线分割
int years = 20;
int total = years*money; // -1381738173 很小的负数,内存溢出
long total2 = years*money;
// 仍然是很小的负数,这是因为 years和money 都是int类型在转化为long类型之前就已经是很小的负数
龙
long total3 = years*(long)(money);
// 200 0000 00000
}
}