学习任务:

视频学习Java强制类型转换

动手测试强制类型转换案例

编译器自动完成数据类型的转换叫自动转换,手动也可以控制类型转换,这叫强制类型转换。

例子:

/**
 *  数据类型转换测试
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class DatatypeConvertDemo2 {
	public static void main(String[] args) {
		
		int a = 3;
		int b = 2;
		//求a除以b的商,并不等于1.5,为什么?
		System.out.println(a/b);
		float c = 4.0F;
		//下边会报错
		//int d = c/b;
		//使用强制转换不报错
		int e = (int) (c/b);
		System.out.println(e);
		byte f = 100;
		//下边报错
		//byte g = f+a;
		//下边不报错
		byte h = (byte) (f+a);
	}
}

int d = c/b;为什么报错?

c为float,b为int,c/b在计算时将b转为float,其结果也为float,将float数据赋值给int编译器不允许。

int e = (int) (c/b);为什么不报错?

(int) (c/b);表示将c/b的值强制转为int型,强制转换的语法是圆括号括住要转的数据类型后边跟变量或常量。

(c/b)的值是一个常量值,即c/b的值,它是一个float型。 (int) (c/b);就是将c/b的值强制转为int型。

byte g = f+a;为什么报错?

byte和int参与计算编译器自动将byte转为int,f+a的结果是int值,将int值赋值给byte变量g报错。

byte h = (byte) (f+a);为什么不报错?

(byte) (f+a);表示将f+a的值强制转为byte,最后将byte的值赋值给byte 变量不报错。

byte h =f+ (byte) a;报错吗?

报错,虽然(byte) a是将a转为byte型,f也为byte变量,byte变量+byte变量似乎应该为byte型,其实不然,byte,short,char三种类型参与运算都会自动转为int型,两个byte变量参与计算其结果也是int型,所以

byte h =f+ (byte) a;报错。

注意:强制转换可能会损失精度,所以不推荐使用。

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题