【问题标题】:Character type casting to Integer type [duplicate]字符类型转换为整数类型[重复]
【发布时间】:2019-04-02 12:15:53
【问题描述】:

我已经学习 Java 2 周了。 我想知道当给定方法参数并且它的类型是整数并且在方法中它与 char 类型进行比较时,强制转换实际上是如何工作的。

如果我将“1”更改为 1,将“7”更改为 7,则根本不会进行比较。 但是,如果我将参数 int 更改为 char,它会进行比较。

boolean isValid(int ch) {
    if(ch < '1' | ch > '7' & ch != 'q') return false;
    else return true;
}

【问题讨论】:

  • 1'1' 不同。 ch &lt; '1'ch &lt; 49 相同,因为 49 是 '1' 的代码点值。
  • @AndyTurner 这里真正有趣的问题是:解决这个问题的好 DUP 是什么?! aydinugur 建议的那个……可能不是。
  • 旁注:最好在条件中使用||&amp;&amp; 而不是|&amp;。尽管逻辑上等效,||&amp;&amp; 版本短路,这意味着如果仅通过计算左侧知道结果,则比较停止。这几乎总是您需要的。

标签: java char int


【解决方案1】:

正如@Andy Turner 已经提到的:'1' 与 1 不同。

您将使用Chararacter.getNumericValue() 看到它。这会将给定的 char 解析为其数字整数值。

例子:

System.out.println(Character.getNumericValue('1')); // This will print 49.

【讨论】:

    【解决方案2】:

    即使您将'1' 替换为1,它也会进行比较。 条件if(ch &lt; 1 | ch &gt; 7 &amp; ch != 'q') 确实被执行。

    现在不同的是,这次字符ch的十进制值与十进制17进行比较。之所以如此,是因为当我们将 char 类型值分配给 int 类型变量时,该 ASCII 字符的十进制值将被分配。

    例如:如果你像isValid('q')一样调用isValid(),那么在isValid(ch)方法中,ch获取值113,这是ASCII字符q的十进制值。所以条件是有效的 if(113 &lt; 1 | 113 &gt; 7 &amp; ch != 'q') ,这给了true

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 1970-01-01
      • 2014-06-30
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多