【问题标题】:Boolean range in Java programming languageJava 编程语言中的布尔值范围
【发布时间】:2011-05-03 16:55:48
【问题描述】:

我在 SCJP 6.0 书中找到了以下段落。最后一条语句是什么意思。关于这些变量是如何实际存储在内存中的,该阅读哪本书?非常感谢。

“这取决于虚拟机。”

布尔类型没有范围;布尔值只能是真或假。如果 有人问你布尔值的位深度,直视他们的眼睛,然后 说,“这取决于虚拟机。”他们会印象深刻的。

【问题讨论】:

    标签: java boolean range virtual-machine


    【解决方案1】:

    这意味着布尔值唯一需要的是truefalse,无论底层实现是什么。

    JLS 状态:

    布尔类型正好有两个值:真和假。

    整数类型的位置:

    整数类型有 byte、short、int 和 long,其值分别为 8 位、16 位、32 位和 64 位有符号二进制补码整数,以及 char,其值为 16-表示 Unicode 字符的位无符号整数。

    因此,您需要整数类型的位深度,但当您实现自己的 JVM 时,布尔值是否将在内存中表示为单个位、字节或多字节变量,这完全取决于您。

    【讨论】:

    • 谢谢 Jan。这很有帮助
    【解决方案2】:

    意思是VM可以将布尔值实现为整数,其中正值为真,0或负值为假。这个想法是,只要 VM 严格按照 true 或 false 处理布尔值,VM 在操作系统级别如何实现布尔值都无关紧要。

    【讨论】:

      【解决方案3】:

      这完全取决于虚拟机,因为他们希望您谨慎使用 booleans。当然,您会一直使用它们,但在给定的课程中,您不太可能只有少数几个。

      你绝对不会有像boolean[] 这样的东西——他们为此制作了java.util.BitSet。将booleans 保留为他们想要的任何大小(8、16、32 位)并保持比替代方案简单更有意义,后者本质上是BitSet 在内部跟踪所有布尔值。 imo,那将是一个糟糕的设计决定。

      【讨论】:

        猜你喜欢
        • 2016-01-12
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        • 2021-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多