想请教一个关于java运算的简单的问题

seraph758 2018-08-11 02:58:23
最近正在自学java 。看到一个题目不是很明白,所以想请教一下大家

不是说long型+int型 结果是long型吗

为什么num = num+2L 就是转换int失败呢 num + = 2L这个怎么就成功了

我的理解不是num = num+2L;不是应该转换成long型 然后结果是加2吗

还有num = num+2L ;
num + = 2L ;
这两个不是一样的的吗 怎么一个就能成功 一个就报错了呢?
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alunSemiconductor 2018-08-12
  • 打赏
  • 举报
回复
https://mp.csdn.net/postedit/81592672

我把它写成了博客,对上面的结论给出了依据,希望对你有所帮助。
seraph758 2018-08-12
  • 打赏
  • 举报
回复
引用 6 楼 ejiao1233 的回复:
https://blog.csdn.net/ejiao1233/article/details/81592672 昨天的地址复制错了
看了博客的内容一下就明白了。谢谢
alunSemiconductor 2018-08-12
  • 打赏
  • 举报
回复
https://blog.csdn.net/ejiao1233/article/details/81592672 昨天的地址复制错了
seraph758 2018-08-12
  • 打赏
  • 举报
回复
引用 4 楼 ejiao1233 的回复:
https://mp.csdn.net/postedit/81592672

我把它写成了博客,对上面的结论给出了依据,希望对你有所帮助。
这个地址我怎么一打开就直接跳转到我编写博客这里了
alunSemiconductor 2018-08-11
  • 打赏
  • 举报
回复
不是说long型+int型 结果是long型吗
回答:是的,没错。
为什么num = num+2L 就是转换int失败呢 num + = 2L这个怎么就成功了
回答:正是因为结果是long类型,所以赋值给int类型的变量num时有可能损失精度,所以这个编译都不会通过。
我的理解不是num = num+2L;不是应该转换成long型 然后结果是加2吗
回答:结果是2,但是内存里是按照long类型存储的。
还有num = num+2L ;
num + = 2L ;
这两个不是一样的的吗 怎么一个就能成功 一个就报错了呢?
回答:这两个一般情况下是一样的(编译都没问题的情况下),失败的理由上面写了,成功的理由,是因为+=这个运算符,有个特别指出,就是不检查后面类型,而是强制按照前面的类型转换之后计算的。
炙羽 2018-08-11
  • 打赏
  • 举报
回复
因为 jvm虚拟机会把 后者自动进行强制转换 所以+=是对的
ckx_9756 2018-08-11
  • 打赏
  • 举报
回复
int+long你又放到int里面,是有错滴,+=好像会做一个类型转换的

50,730

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧