Scala思考题:val c : Char = ‘A‘ + 1 println

Scala思考题:val c : Char = ‘A‘ + 1 println,第1张

​🏠​ 个人主页: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中都能正确运行不会报错!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/870998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存