我可能會錯過對Java中字節的一些基本理解。以下是應用程序的一個簡化摘錄來說明問題:Java字節變量如何成爲128?
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的調試器總是顯示-128(0x80的)爲foo.bProblem。這意味着調試器無法看到String.valueOf()顯示的內容。 Java字節如何可以是128?
我在將foo.bProblem添加到List時發現了這個問題: Java.lang.ArrayIndexOutOfBoundsException:length = 256; index = 256
任何人都可以提供一些提示讓我明白這一點嗎?
編輯:
我後來發現這種情況只在Intel Android模擬器正如我在我的評論如下喬普的回答中寫道。
'byte'不能容納'128'! 'byte'的值應該在'-128'和'127'之間。 – 2013-03-17 22:27:55
這是我的理解。 String.valueOf(foo.bProblem)如何產生128? – Hong 2013-03-17 22:30:16
我能想到產生'128'的唯一方法是在'foo.bProblem'前加一個減號作爲'String.value( - foo.bProblem)',其中'foo.bProblem ==(byte) 0x80'。 – 2013-03-17 22:37:16