【问题标题】:Understanding boolean in Java [duplicate]理解 Java 中的布尔值 [重复]
【发布时间】:2015-10-04 09:40:22
【问题描述】:

我已经开始学习java了。我正在用java学习Boolean。布尔值有两种类型,truefalse。在 C 中没有这样的东西。我们有01。所以,我想知道truefalse 是如何工作的?它是如何存储在内存中的?它是否需要 1 位空间或更多?它是某种类型的字符串吗?例如,

class Test {
public static void main(String[] args) {
    System.out.println( 5 > 6 );
}

}

我明白了:

false

那么,false 的大小是多少?它看起来像 java 中的字符串。

【问题讨论】:

  • 好吧,假和真呢?
  • "那么,false 的大小是多少?它看起来像 java 中的字符串。" --- 将其与 int 进行比较,后者是存储在 4 个字节中的 32 位值,但是“那么,123456 的大小是多少?它看起来像 java 中的字符串。”。你看到你的问题的谬误了吗?
  • @KrunalParmar 哇,你是不是混淆了这个问题。 true not 有 8 字节表示。 Boolean.TRUE 可能,但这不是你要说的。
  • @learner 存储为 32 位值 00000000000000011110001001000000(十六进制 0001E240)的数字将打印为字符串 "123456",与布尔值相同,false 将打印为字符串"false"。如果您假设一个布尔值被存储为字符串只是因为它在打印时具有字符串表示,那么您必须对int 值做出相同的(有缺陷的)假设。

标签: java boolean


【解决方案1】:

为什么在调用 System.out.println() 时看到 true 和 false 的答案是因为 println 方法被重载。其中一种方法采用布尔参数

public void println(boolean x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

它调用定义为的 print() 方法之一(也被重载)。

public void print(boolean b) {
    write(b ? "true" : "false");
}

这意味着当您使用布尔值调用 println 时,jvm 将调用显示的方法并打印“true”或“false”

如果你正确设置了你的 IDE,你可以探索 Java 库的源代码,这样你就可以看到我在上面发布的方法。

至于尺寸,正如其他人发布的那样,答案取决于机器,如下所示What is the size of a boolean variable in Java?

【讨论】:

  • @learner 很好的答案,但如果这回答了你的问题,那么你根本就不想知道内部大小或表示。
  • 还要确保您了解布尔值和布尔值之间的区别。 Boolean 是一个对象,但 boolean 是原始的。在您的示例中,您实际上正在处理一个布尔值,它是 5 > 6 的输出。
  • @EJP 是的,我想知道为什么会打印 false 以及大小和内部表示。你的回答给出了我的部分答案,也给出了细分的答案。这就是我接受这个答案的原因。
【解决方案2】:

Boolean 有两种类型,true 和 false。

没有。 Boolean 一种类型,它有两个,true和false。

真假如何工作?它是如何存储在内存中的?是否需要 1 位空间或更多空间?

没有定义,但 JVM 规范中的措辞大多支持存储为 0 或 1 值字节。

它是某种类型的字符串吗?

没有。

那么,false 的大小是多少?

它没有被定义,你无法发现它。

看起来像java中的字符串。

目前为止您提供的证据并非如此。

【讨论】:

  • 谢谢你的回答。“假”输出呢。它看起来不像字符串吗?内部如何处理布尔值?
  • @learner 输出文本“假”源于System.out.println(boolean) 的行为。我建议你查一下。它并不能证明内部表示的任何内容。
  • @learner 当您打印它时,它会打印为文本“true”或“false”。这并不意味着它是某种字符串,或者它被存储为字符串。您唯一需要知道的是它只有两个可能的值。它在内存中的存储方式取决于 Java 虚拟机,并且在 JVM 的不同实现中可能会有所不同。
猜你喜欢
  • 2014-02-25
  • 2011-04-13
  • 2011-10-05
  • 1970-01-01
  • 2012-07-10
  • 2015-01-29
  • 2010-11-20
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多