Java中自动类型转换、强制类型转换、常量优化机制

自动类型转换 

隐式转换(自动类型转换):把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。

//这里用一个比double类型小的数值,去赋值。整数型比浮点型范围小
double d = 12; //整数12默认为int型
System.out.println(d); //结果:12.0  结果显示从int类型的整数,变成了double类型的小数
//由此可得,小的数据类型直接赋值给大的,类型会提升,所以隐式类型转换也叫自动类型提升。

数据类型范围大小排序:

不同数据类型进行运算,小的数据类型会提升为大的之后,再参与运算:

public class test1{
	public static void main(String[] args){
		int a = 6;
		double b = 6; //发生隐式转换

		//a会提升为double型后再参与运算,所以运算结果应该用double变量接收
		System.out.println(a+b); //结果为12.0
		System.out.println(a/b); //结果为1.0
		System.out.println(a-b); //结果为0.0
		System.out.println(a*b); //结果为36.0
	}
}

 特别注意:byte、short、char三种数据进行运算的时候,不管是否有更高的数据类型,都会提升为int再参与运算:

byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; 
// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。
// 修改为:
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);

强制类型转换

 强制类型转换:把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量

double num1 = 5.5;
int num2 = (int) num1; // 将double类型的num1强制转换为int类型
System.out.println(num2); // 输出5(不是4舍5入,而是小数位直接舍弃)

强制类型转换格式:目标数据类型 变量名 = (目标数据类型)值或者变量;  

 总结:不能直接用大的数据类型给小的数据类型赋值编译会报错,必须使用强制类型转换格式,但也容易出现精度损失问题,所以通常不太建议这么干。

常量优化机制

  • 为什么 byte b = 3 + 4 是正确的呢?(3 和 4 默认应该为int型)

常量优化机制:常量运算的时候,会在编译的时候就让数值相加得到结果,自动判断结果是否在目标数据类型范围之内,如果在,则不需要修改,否则就会报错。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值