【问题标题】:convert from boolean to byte in java在java中将布尔值转换为字节
【发布时间】:2014-10-11 04:38:40
【问题描述】:

我需要将字节值设置为方法参数。我有布尔变量isGenerated,它决定了要在这个方法中执行的逻辑。但是我可以直接将布尔值作为字节参数传递,这是不允许的,也不能在 java 中强制转换。所以我现在的解决方案是这样的:

myObj.setIsVisible(isGenerated ? (byte)1 : (byte)0);

但这对我来说似乎很奇怪。也许有更好的解决方案来做到这一点?

【问题讨论】:

  • 奇怪的是setIsVisible 方法会接受除布尔值之外的任何内容...

标签: java boolean byte type-conversion


【解决方案1】:

你的解决方案是正确的。

如果您愿意,可以通过以下方式避免一次演员:

myObj.setIsVisible((byte) (isGenerated ? 1 : 0 ));

此外,您应该考虑对您的实施进行以下更改之一:

  • 如果您需要考虑超过 2 个可能的状态,请将您的方法更改为 setVisiblityState(byte state)

  • 如果您的方法符合预期,请将您的方法更改为 setIsVisible(boolean value)

【讨论】:

  • myObj.setIsVisible((byte) isGenerated)); 也可以吗?避免使用?: 运算符,因为isGenerated 已经是true|false,我假设它已经评估为1|0?如果我错了,请纠正我,我很想知道,因为它可能因语言而异。
【解决方案2】:

您可以使用此解决方案。我在this 非常有用的页面上找到了它

boolean vIn = true;
byte vOut = (byte)(vIn?1:0);

【讨论】:

    【解决方案3】:

    这并不奇怪。没关系。 奇怪的是,您需要将类型化的布尔值转换为不可自我解释的字节。然而,有时我们在使用遗留 API 时必须这样做。

    顺便说一句,如果您想节省内存,您可以使用 1 位而不是字节,因此您可以将多个布尔标志组合在一起,同时为每个布尔值使用位。但是只有在节省几个字节可能很重要时,这种技术才与大量数据相关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-28
      • 2012-03-02
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2014-11-21
      相关资源
      最近更新 更多