搜索

首页  >  问答  >  正文

java - Byte自增问题

Byte a = 123;
        a++;
        System.out.println(a);// 124
        /*
         * 上面的结论是: a++的时候首先是 创建一个Byte对象124,然后将a引用指向这个Byte 124对象,这个解释有问题吗?
         */

        Byte b = 126;
        b = b++;
        System.out.println(b);// 126
        /*
         * 根据第一段代码的执行结果;
         * b=b++,的执行操作是首相将b引用赋值给b引用,所以没有改变,然后将b引用所指向的对象自增(这个实现的过程是创建一个对象值为127,
         * 然后让b引用指向这个127),如果这样理解,结果不应该是127吗
         */

求解,谢谢

PHPzPHPz2805 天前506

全部回复(5)我来回复

  • 大家讲道理

    大家讲道理2017-04-18 10:58:08

    b = b++: 如果了解 C++ 的话,可以参考 ++ 的自增的实现,应该就能理解为什么是 126 了

    Byte operator++(Byte) {
        Byte temp = *this;
        this->value = this->value + 1;
        return temp;
    }

    可以理解为 b 等于操作自增前的 temp

    回复
    0
  • PHP中文网

    PHP中文网2017-04-18 10:58:08

    ++、--务必单独写,否则就是自己给自己找麻烦。
    对于像i=i+++++i这种题目,只能鄙视了……

    回复
    0
  • 高洛峰

    高洛峰2017-04-18 10:58:08

    已解决
    http://blog.csdn.net/brooksyc...
    跟帖接分

    回复
    0
  • 迷茫

    迷茫2017-04-18 10:58:08

    ++b和b++的区别,其实没啥用

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:58:08

    java栈帧含有局部变量表和操作数栈,++自增操作是对局部变量表中的值直接操作的,i=i++时,先把局部变量表的i压入操作数栈,再把局部变量表的i加1变为127,然后把操作数栈中的i(126)写回到局部变量表的i中,覆盖了127数据,变为126了。而++i顺序不同,是先自增局部变量表的i,然后再加入操作数栈的。

    回复
    0
  • 取消回复