24小时在线 - 古典小说 - 文学小说 - 关于我们
您的当前位置:首页 > Java > Java SE >

java中的+=解决方法

来源:比特技术 编辑:比特技术网 时间:2018-07-03点击:
导读:java中的+=如下面的程序 class ? Test { ? ? ? ? public ? sta
java中的+=
如下面的程序
class   Test
{
        public   static   void   main(String   args[])
        {
                short   s=1;
                s=s+1;
                s+=1;
        }
}
中s=s+1不对,但s+=1却可以通过,为什么?

------解决方案--------------------
我是这样理解的:

“1”这个常量,编译器在处理的时候是有一定智能性的,可以根据上下文,把它理解成“int 常量”或者是“short 常量”。

对于“赋值运算符(=)”,编译器按照被赋值变量的类型来理解“1”的类型;对于“累加赋值运算符(+=)”也是这样处理。所以语法上就没有问题了(不需要强制转换)。

对于“加法运算符(+)”,编译器总是把“1”当作“int 常量”来理解,所以 s+1 的结果是一个“int 型值”,所以 s=s+1 就需要强制转换了。
------解决方案--------------------
只要看看jvm指令就可以很容易理解了:
public class Test {

public static void main(String[] args) {
short a = 1;
a += 1;
}

}
它对应的jvm代码如下:
0: iconst_1 //将int型常量1加载到操作栈(即short a = 1;中的1)
1: istore_1 //将操作栈中的值存储到变量(即存储到变量a中,a完成了初始化)
2: iload_1 //将变量(即a)的值加载到操作栈
3: iconst_1 //将int型常量1加载到操作栈(即 a += 1;中的1)
4: iadd //将操作栈中的两个值相加
5: i2s //将结果转换为short
6: istore_1 //将结果存储到变量(即存储到变量a中,a完成了运算)
7: return //方法结束返回。
第5行的代码执行了一个强制向下转型。来源:比特技术在线(www.byte.online),欢迎分享本文,转载请保留出处!
http://www.byte.online/a/Java_SE/2018/88995.html
责任编辑:比特技术网

    打赏

    取消

    感谢您的支持,我会继续努力的!

    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    网友评论:

    Copyright © www.byte.online 比特技术在线 版权所有 粤ICP备15038486号-3
    本站所有资料来源于网络,由个人收集整理,仅限于个人学习和研究,如果侵犯您的权益请联系我们删除!
    Top