我可能错过了对 Java 中字节的一些基本理解。以下是应用程序的简化摘录,用于说明问题:
public class Foo
{
byte b1;
byte b2;
byte bProblem;
}
foo 是 Foo 的一个实例。以下内容让我困惑了几个小时:
Log.d("Debug", "Before: " + String.valueOf(foo.bProblem));
if (foo.bProblem != (byte) 0x80) {
foo.bProblem = (byte) 0x80;
Log.d("Debug", "After: " + String.valueOf(foo.bProblem));
}
LogCat 显示以下内容:
03-17 21:58:46.590: D/Debug(2130): Before: 128
03-17 21:58:46.590: D/Debug(2130): After: -128
Eclipse 的调试器总是为 foo.bProblem 显示 -128 (0x80)。这意味着调试器看不到 String.valueOf() 揭示的内容。Java字节怎么可能是128?
我在将 foo.bProblem 添加到 List 时注意到了这一点:Java.lang.ArrayIndexOutOfBoundsException: length=256; 指数=256
谁能提供一些提示让我理解这一点?
编辑:
后来我发现这仅发生在英特尔 Android 模拟器上,正如我在 Joop 回答后的评论中所写的那样。