s=s+1可能编译不通过,s+=1就可以,是不是很神奇

本文深入探讨Java中的数据类型转换机制,包括自动类型转换和强制类型转换的规则,以及包装类的转换过程。特别分析了short类型变量在进行算术运算时的特殊处理,解释了+=操作符的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载文章:

https://blog.youkuaiyun.com/fanxiaobin577328725/article/details/73477426

首先我们先说明一下Java中的基本数据类型转换:

在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级:(byte,short,char)→int→long→float→double
简单数据类型之间的转换又可以分为:

  • 低级到高级的自动类型转换(隐式)
  • 高级到低级的强制类型转换(显式)
  • 包装类过渡类型能够转换

隐式类型转换可以从小到大自动转换,即byte→short→int→long;反过来会丢失精度,必须进行显示类型转换

  1. short s=1;

  2. s=s+1;

然而不知你们有过这样疑问?1在short值的范围内,此时就不能视为是short类型吗?这样s+1不就是没有类型差异吗?

原因是:整数的默认类型是 int

由上面的分析可得到的结果:自然是编译不通过的,提示损失精度,因为1为int类型所以转换为short类型必须强制转换。然而

  1. short s=1;

  2. s+=1;

为什么能编译通过那?
还有一个问题 :s+=1的意思与s=s+1不同吗?还真不一样!
s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换所以将一个int类型赋给short就会出错,
s+=1不同,由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),反过来讲就是 s+=1 <=> s = (s的类型)(s+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值