0

Java でバグと思われる非常に奇妙なものを見つけました。for ループは、32767 (最大値、こちらを参照) の短い値の条件を正しく評価しません。以下のコード例を参照してください。ここで何か不足していますか?

for (short i = 32766; i <= 32767; i++) {
    System.out.println("i is now " + i);
    if (i < 0) {
        System.out.println("This should never be printed");
        break;
    }
}

期待される出力:

i is now 32766
i is now 32767

実際の出力:

i is now 32766
i is now 32767
i is now -32768
This should never be printed
4

3 に答える 3

1

<=32767条件が TRUE であるため、 の値がi再びインクリメントされます。の最大値shortは 32767 であるため、1 ずつ増やすとi-32768 になり、32767 より小さいか等しくなります。

short: short データ型は、16 ビットの符号付き 2 の補数の整数です。最小値は -32,768 で、最大値は 32,767 (両端を含む) です。バイトと同様に、同じガイドラインが適用されます。メモリの節約が実際に重要な状況では、short を使用して大きな配列でメモリを節約できます。

こちらをご覧ください:プリミティブ データ型

于 2013-06-10T09:40:27.380 に答える