在32位JVM和64位JVM之間Integer.MAX_VALUE
的值是不同的?32位JVM和64位JVM之間Integer.MAX_VALUE是否有區別?
我正在編譯一個使用32位JDK的Java類,並將它部署到64位機器上。我只是想確保我可以依靠檢測if (aNumber == Integer.MAX_VALUE)
。
在32位JVM和64位JVM之間Integer.MAX_VALUE
的值是不同的?32位JVM和64位JVM之間Integer.MAX_VALUE是否有區別?
我正在編譯一個使用32位JDK的Java類,並將它部署到64位機器上。我只是想確保我可以依靠檢測if (aNumber == Integer.MAX_VALUE)
。
號根據定義Integer.MAX_VAlUE = 2^31 - 1
否。32位JDK爲實例創建32位地址,64位JDK爲對象實例創建64位地址。因此,Integer.MAX_VALUE是相同的,因爲它只是一個值,而不是一個對象地址。 :)
請注意,64位JVM *可以使用32位引用。有關詳細信息,請參閱[CompressedOops](http://wikis.sun.com/display/HotSpotInternals/CompressedOops)。 –
是的,這是完全正確的。忘了添加它。 :) –
此常數具有不管代碼是否JVM運行上的相同的值是32位或64位。所述documentation for Integer.MAX_VALUE描述該值作爲:
的常量保持最大值的
int
可以具有2 -1。
感謝您的額外信息。只是想知道在什麼情況下我們需要引用檢查(Integer == Integer)?我們不應該總是隻需要價值檢查嗎?那麼爲什麼沒有人在Integer上重載運算符'=='? – GaryX
所有32位和64位類似的是他們可以引用的存儲位置的數量。在32位可能的地址數量的情況下將是2^32,並且在64位的情況下它是2^64。
jvm版本與Integer.MAX_VALUE無關,它將保持不變。
它比這更進一步:*編譯*平臺使**沒有區別**:輸出將是相同的。在理想的世界中,即使* runtime *平臺也沒有什麼區別,但是這裏可能會有細微的差異。 –