【发布时间】:2013-03-06 05:00:11
【问题描述】:
我可能错过了对 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 添加到列表时注意到了这一点,导致: Java.lang.ArrayIndexOutOfBoundsException:长度=256;索引=256
谁能提供一些提示让我理解这一点?
已编辑:
我后来发现这只发生在英特尔 Android 模拟器上,正如我在 Joop 回答后的评论中所写的那样。
【问题讨论】:
-
byte无法容纳128!byte的值应介于-128和127之间。 -
这是我的理解。 String.valueOf(foo.bProblem) 怎么会产生 128?
-
我能想到的产生
128的唯一方法是在foo.bProblem前面添加一个减号作为String.value(- foo.bProblem),其中foo.bProblem == (byte) 0x80。 -
您使用的 Java 版本是什么?
-
编译器合规级别为1.6。