1.类型转换的分类
因为Java是强类型语言,所以在java程序中,不同基本类型的值经常需要在不同类型之间进行转换。
Java中的类型转换有以下两种 :
- 自动类型转换
- 强制类型转换
在运算中,不同类型的数据先转换为同一类型,然后进行运算。
但是转换只能是相关的类型进行转换,不相干的不可以进行转换,比如 boolean 和 int 就不可以。
2.自动类型转换
系统支持把某个基本类型的值直接赋值给另一种基本类型的变量,成为自动类型转换。
以上 其中数据类型,从左到右 可以进行自动类型转换!
即 : 数据范围小的 转换为 数据范围大。
/*
自动类型转换
*/
byte byte11 = 10;
int int11 = byte11; // byte --> int
double double11 = int11; // int --> double11
System.out.println("byte11 : "+byte11);
System.out.println("int11 : "+int11);
System.out.println("double11 : "+double11);
// 下面是 控制台输出的内容
byte11 : 10
int11 : 10
double11 : 10.0
如果在算数表达式中含有int、long、float、double型的数据,java首先会将所有数据类型相对较低的变量自动转换为表达式中数据类型最高的数据类型,然后再计算,并且计算结果的数据类型也为表达式中数据类型相对最高的数据类型。
/*
包含 int,long,float,double 的自动类型转换
*/
int int33 = 10;
double double33 = 1000;
double res33 = double33 + int33; // int 被自动转为 double
System.out.println("res33 : "+res33); // 结果应该是double类型的值
// 下面是 控制台的输出结果
res33 : 1010.0
如果在算数表达式中只含有byte、short、char型的数据,java首先将所有变量的类型自动转换成int型,然后在进行计算,并且计算结果的数据类型也为int型。byte、short、char三者之间不能直接相互转换。
/*
自动转为 int 类型
*/
byte byte44 = 12;
char char44 = 'a'; // 97
System.out.println(byte44 + char44); // 12 + 97 = 109
// 下面是 控制台的输出结果
109
3.强制类型转换
数据范围大的 转换为 数据范围小的。
会出现内存溢出
和精度
问题。
语法 : 等式右边增加(类型)
表示强制转换类型。
/*
强制类型转换
*/
double double22 = 130.2345;
int int22 = (int)double22; // 只保留了整数部分
byte byte22 = (byte)double22; // 此处会出现内存溢出,因为 byte的最大值是127
System.out.println("double22 : "+double22);
System.out.println("int22 : "+int22);
System.out.println("byte22 : "+byte22);
//下面是 控制台输出内容
double22 : 130.2345
int22 : 130
byte22 : -126
4.分析一个例子
/*
下面是内存溢出的情况分析
*/
int money = 10_0000_0000; // 这是 10亿,jdk7新特性,数字之间可以加下划线
int years = 20;
int total1 = money * years; // 200亿,已经大于int类型最大值,发生了内存溢出
long total2 = money * years; // 没有效果,因为转换之前已经内存溢出了
long total3 = money * (long)years; // 这样就会先自动转为long,在进行计算,就ok了
System.out.println("total1 : "+total1);
System.out.println("total2 : "+total2);
System.out.println("total3 : "+total3);
//下面是 控制台输出内容
total1 : -1474836480
total2 : -1474836480
total3 : 20000000000
5.完成
Congratulations!
You are one step closer to success!