栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Scala思考题:val c : Char = ‘A‘ + 1 println(c)是否能够正确运行?

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scala思考题:val c : Char = ‘A‘ + 1 println(c)是否能够正确运行?

​​ 个人主页:csdn春和
​​ 推荐专栏:更多专栏尽在主页!
 JavaWeb专栏(从入门到实战超详细!!!)
 SSM专栏 (更新中)
​​ 本期文章:问题思考
如果对您有帮助还请三连支持,定会一 一回访!


❓ 直接看问题

问题思考:下面的代码在java中能否正确运行?在Scala中呢?

val c : Char = 'A' + 1
println(c)

首先我们看看在java中是否正确

再看看在Scala中IDEA是否会报错:

分析:+为二元运算符 当数据类型不匹配时会自动提升数据类型 但是结果为int 将int值赋给char型 所以会报错

真的是这样吗?

我们再来看看运行结果:

我们发现java 和 scala都能正常运行,这是为什么?

其实上述代码在java和scala中都是正确的,这个跟编译器有关系,常量计算是在编译时完成的!

在Java中我们注释掉上述代码 ,添加下面的代码:

再次运行 反编译查看:

进行反编译

查看反编译结果:

所以刚刚的代码就好理解了,其运算在编译时就完成了 执行时并不会报错。

我们再次将代码打开 运行

反编译查看

由于A对应的是65 65+1=66 并且由于是在编译时就计算得到66 而66 也没有超出char的范围(-128~127)那么真正执行到 char c = 'A' + 1 的时候 就相当于 char c = 66 而66 对应的字符是B 所以最后会输出 B

 在scala中也是正确的,Scala是有java进化而来,运行机制也和java一样 在编译时得到结果,真正执行的时候还是在char的范围内 在Scala中最后运行结果也会输出B

上述能正常运行的原因在于两个都是常量如果是如下代码呢?

在java中直接编译就不通过

在Scala中运行也不行

所以变量不可以,只有常量计算才是在编译时完成!所以这个代码在java和Scala中都能正确运行不会报错!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号