课前小例
package com.zpwd.chapter1_0225;
public class TypeChange {
public static void main(String[] args) {
// 类型转换
// 1.自动类型转换:两种类型彼此兼容,目标的取值范围大于原型
byte num1 = 12;
short num2 = num1;
int num3 = num2;
long num4 = num3;
// 2.强制类型转换:(1)两种类型彼此兼容(不能跨大类型),但目标类型取值范围小于原类型(强转有风险,用时需谨慎)
long a1 = 128;
int a2 = (int) a1;
short a3 = (short) a2;
byte a4 = (byte) a3;
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
System.out.println(a4);// 溢出、损失精度:-128
// 运算的兼容:向范围大的方向兼容:byte ,char,shory,int运算时,兼容方向是int。
long l1 = 10;
int l2 = 20;
// int l3 = l1 + l2; //该种写法报错
int l3 = (int) (l1 + l2);
byte num11 = 9;
short num12 = 10;
// short num13 = num11+num12;//报错,因为num11+num12得到的类型是int
short num13 =(short) (num11+num12);
//当double类型的变量强转成int时,默认为取整
//面试题:short s1= 99;s1 = s1+2;与s1+=2 有什么区别?
// s1+2 得到的是int类型,给s1重新赋值时,必须强转成int
// 而s1+=2 不需要强转
}
}
转换类型:隐式转换(自动类型转换)、强制类型转换
隐式转换:两种类型彼此兼容,范围小的类型转成范围大的类型。
byte 可以自动转换成 short 、int 、long
short 可以自动转换成 int 、long
int 可以自动转换成 long
强制类型转换:两种类型彼此不兼容(描述并不准确),范围大的类型转成范围小的类型。
long 强制转换成 int 、short 、byte
注意:
- 强制转换成什么类型,就要在前面加(小范围类型),例如(int)、(short)、(byte)
- double类型的变量强制转换成int类型的变量时,默认为取整。
- 运算兼容类型:byte ,char,shory,int,他们在做运算时,全部向int类型兼容。例如:btye类型变量+char类型变量 = int类型变量。
面试题
short s1= 99;
s1 = s1+2;
该种写法是否正确,正确的写法与s1+=2有何区别?
- 该种写法不正确,s1 是short类型,因为byte ,char,shory,int他们属于兼容类型,short类型变量+int(默认)2 = int,而int变量赋值给short时,因为范围变小,需要强制转换。
正确写法:
short s1= 99;
s1 = (short)(s1+2);
而s1+=2 是不需要强制转换的。
网友评论