【问题标题】:Why is Char implicitly converted to a Int?为什么 Char 隐式转换为 Int?
【发布时间】:2013-10-05 00:28:23
【问题描述】:

在 Java 中,为什么 char 原语隐式转换为 int 原语?人们说这是因为扩大了转换——一个 2 字节的 char 将适合一个 4 字节的 int,但是布尔值呢?布尔值肯定占用不到 2 个字节,但它们不会被隐式转换。

【问题讨论】:

  • Java 的设计方式只有 truefalse 是有效条件。例如,你不能像在其他语言中那样做while(1)。因此,将布尔值视为整数是没有意义的。
  • 你在说什么?转换在不同的上下文中发生的方式不同。
  • 转换如下:char test = 'a'; int test2 = 测试;
  • 对于“为什么”字符在这里被静默转换为整数没有很好的答案。这真的只是一个糟糕的设计选择,现在他们坚持了下来。还有很多其他的。

标签: java type-conversion implicit-conversion


【解决方案1】:

布尔值不是数值数据类型,因此未定义隐式转换。

但幸运的是,将布尔值转换为您想要的任何 int 值都很容易:

int value = b ? 1 : 2; // if b is true, value will be 1, else 2.

【讨论】:

    【解决方案2】:

    Java 开发人员不希望 Boolean 隐式转换为任何 int 类型,因为它在 C 语言中是模棱两可的。请看这个question

    【讨论】:

    • 实际上,转换并没有什么“模棱两可”的地方。问题是转换合法通过使其成为有效代码而使常见的编程错误变得危险。
    【解决方案3】:

    需要从 char 到 int 的转换,因为没有为 char 定义运算符:如果不先转换为 int,就无法检查 char 是否大于另一个 char 或 char 是否在给定范围内。

    对于 JVM 级别的布尔值也是如此,不同之处在于您不需要对它们执行这些操作(true > false 似乎有点随意)而需要对 chars 进行操作来实现诸如字符编码之类的事情转换和大小写转换。

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多