Java 用于运行和调试的ByteBuffer的不同行为

Java 用于运行和调试的ByteBuffer的不同行为,java,debugging,compiler-optimization,bytebuffer,Java,Debugging,Compiler Optimization,Bytebuffer,当我运行上述代码行时,它会按我的需要打印输出 byte[] arr; ByteBuffer buffer = ByteBuffer.allocate(10); buffer.put((byte) 0x00); buffer.put(new byte[] {0x01, 0x02}); buffer.put(new byte[] {0x03, 0x04, 0x05}); buffer.put(new byte[] {0x06, 0x07, 0x08, 0x09}); arr = buffer.ar

当我运行上述代码行时,它会按我的需要打印输出

byte[] arr;

ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 0x00);
buffer.put(new byte[] {0x01, 0x02});
buffer.put(new byte[] {0x03, 0x04, 0x05});
buffer.put(new byte[] {0x06, 0x07, 0x08, 0x09});
arr = buffer.array();

for(byte c : arr) {
    System.out.format("%d ", c);
}
当我用Debug运行它时,我再次得到我想要的结果

0 1 2 3 4 5 6 7 8 9
现在,我在任何一行上放置一个断点。在调试模式下用手移动应用程序时,只添加最后一个字节序列。它实际上添加了所有字节数组,但从索引0开始添加所有字节数组,结果是

0 1 2 3 4 5 6 7 8 9 
我不知道为什么会这样。这是调试器问题吗

我正在使用IntelljIdea和java1.8.0_162。当我放置VM选项-Djava.compiler=NONE时,一切正常。这个过程改变了什么


感谢您的帮助。

看起来您在调试器中单击的方式使调试器跳过了前三行buffer.put的执行。这是不可能的。我试图把断点放在代码的第一行。我一个接一个地执行所有命令。
6 7 8 9 0 0 0 0 0 0