ホームページ  >  に質問  >  本文

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吗
         */

求解,谢谢

PHPzPHPz2742日前476

全員に返信(5)返信します

  • 大家讲道理

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

    b = b++: C++ を知っている場合は、++ の自動インクリメント実装を参照すると、なぜ 126 なのか理解できるはずです

    リーリー

    操作がインクリメントされる前の 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
  • キャンセル返事