基本数据类型转换
在Java程序中,不同的基本数据类型的值经常需要进行相互转换。Java语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种转换方式:自动类型转换和强制类型转换。
1. 自动类型转换
将取值范围小的类型
自动提升为取值范围大的类型
。
以下情况会发生自动类型转换(隐式类型转换):
- 当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时
int i = ‘A’;//char自动升级为int
double d = 10;//int自动升级为double - 当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算
int i = 1;
byte b = 1;
double d = 1.0;
double sum = i + b + d;//混合运算,升级为double - 当byte,short,char数据类型进行算术运算时,按照int类型处理
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int
char c1 = ‘0’;
char c2 = ‘A’;
System.out.println(c1 + c2);//113
boolean类型不参与
2. 强制类型转换
通常将取值范围大的类型
转换成取值范围小的类型
时需要进行强制(显示)类型转换。
转换格式:
数据类型 变量名 = (数据类型)被强转数据值;
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示:有风险,可能会损失精度或溢出
int i = (int)3.14;//强制类型转换,损失精度
double d = 1.2;
int num = (int)d;//损失精度
int i = 200;
byte b = (byte)i;//溢出
(2)当某个值想要提升数据类型时,也可以使用强制类型转换.提示:这个情况的强制类型转换是没有风险的。
int i = 1;
int j = 2;
double shang = (double)i/j;
3.特殊的数据类型转换
任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型
System.out.println(“” + 1 + 2);//12
练习
1.判断如下代码是否编译通过,如果能,结果是多少?
short s1 = 120;
short s2 = 8;
byte s3 = (byte)(s1 + s2);
2.判断如下代码是否编译通过,如果能,结果是多少?
char c1 = ‘0’;
char c2 = ‘1’;
char c3 = c1 + c2;
3.判断如下代码是否编译通过,如果能,结果是多少?
char c1 = ‘0’;
char c2 = ‘1’;
System.out.println(c1 + c2);
4.判断如下代码是否编译通过,如果能,结果是多少?
int i = 1;
int j = 2;
double d = i/j;
System.out.println(d);
思考题和面试题:
1.下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;
2.下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
3.下面的操作结果是什么呢?
byte b = (byte)130;//-126
4.字符参与运算
是查找ASCII里面的值
‘a’ 97
‘A’ 65
‘0’ 48
System.out.println(‘a’);
System.out.println(‘a’ + 1);
5.字符串参与运算
这里其实是字符串的连接
System.out.println(“hello”+‘a’+1);//
System.out.println(‘a’+1+“hello”);//
System.out.println(“5+5=”+5+5); //
System.out.println(5+5+“=5+5”);//