Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换;
低----------------------------------------------------高
byte,short,char-->int-->long-->float-->double (备注:浮点数的优先级大于整数 )
在Java的运算,不同类型的数据先转换为同一类型,然后进行运算;
强制类型转换:高容量数据类型转换为低容量数据类型时,需要进行强制转换;
自动类型转换:低容量数据类型转换成高容量数据类型时,可以自动类型转换;
类型转换举例1:强制类型转换、内存溢出问题
public class List07 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i;
//int是高容量的数据类型,转成byte低容量数据类型时需要进行强制转换
System.out.println(i);//输出128
System.out.println(b);//输出-128 高转低强制转换时注意内存溢出问题;
// (byte的支持1个字节,表示整数的范围:-128—127,不能表示128,所以内存溢出)
}
}
强制转换方式 : (byte)i; 在类型变量前加(),括号内写要转换的数据类型
注意:高转低强制转换时注意内存溢出问题
类型转换举例2:自动类型转换
package basic;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
public class List08 {
public static void main(String[] args) {
//从低到高,可以自动类型转换,不需要强制转换;
int i = 128;
double d = i;
System.out.println(d); //输出 128.0
}
}
类型转注意点:
- 不能对布尔值进行转换;
- 不能转换成不相干的类型;
- 把高容量数据类型转换成低容量数据类型,需要强制转换;
- 类型转换的时候可能存在内存溢出,或者精度问题;
类型转换举例3:精度问题
public class List09 {
public static void main(String[] args) {
System.out.println((int)23.7); //输出23
System.out.println((int)-56.34); // 输出-56
//强制转换为整数后精度变低
}
}
类型转换举例4:字符类型(char)也可以自动转换为整数(int),整数(int)也能强制转换为字符(char)
public class List10 {
public static void main(String[] args) {
char c = 'a';
int i = c +10; // 输出107 字符 c 被自动转换成了97。说明字符本质上也是数字
System.out.println(i);
System.out.println((char) i);//输出k
}
}
类型转换举例5:操作比较大的数字时,注意溢出问题
public class List11 {
public static void main(String[] args) {
//操作比较大的数的时候,注意内存溢出问题
//JDK7新特性,数字之间可以用下划线分割;
int money = 10_0000_0000;
int years = 20;
int total = money*years; //int类型的范围为-2147483648 到 2147483647
// total远远超出了int的表述范围,内存溢出
System.out.println(total); // 输出 -1474836480
//若要计算正确可使用一下方式
long total1 = money*(long)years;
System.out.println(total1); //输出正确结果 200_0000_0000;
}
}