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
これを理解するためのヒントを誰かに教えてもらえますか?
編集:
Joopの回答に続いてコメントに書いたように、これはIntel Androidエミュレーターでのみ発生することが後でわかりました。