【问题标题】:Java - why won't char '+' appear on the console? [duplicate]Java - 为什么控制台上不会出现字符“+”? [复制]
【发布时间】:2020-10-28 20:55:15
【问题描述】:

我正在制作一个简单的计算器,这是我的代码。

public static void main(String[] args) {
    int x = 3;
    int y = 7;
    char w = '+';
    
    System.out.println(x+w+y+"="+(x+y));
}

结果显示为“53 = 10”,我不明白为什么“+”不会出现以及 53 的来源。当我在最后一行使用 (w) 而不是 w 时,会出现正确的结果 '3+7=10'。

【问题讨论】:

标签: java char println


【解决方案1】:

这种行为是由于表达式

x + w + y

实际上被评估为3 + 43 + 7,为什么,您可能想知道?好吧,因为+ 是一个字符,实际上是一个数字,而 43 不是整数值。

【讨论】:

  • 非常感谢!从来不知道 char 可以是一个数字!
【解决方案2】:

chars 在 Java 中可以隐式转换为整数。 x + w + y 添加它们的值。字符 '+' 的整数值恰好是 43,所以你得到 3 + 43 + 7 (= 53)。

w 放入括号不会改变这一点,这与你所说的相反。

要解决此问题,请将 w 设置为 String

String w = "+";

【讨论】:

  • 第一个关键点是+是左结合的,所以x+w+y+"="+(x+y)等价于((((x+w)+y)+"=")+(x+y));第二个关键点是如果任一操作数是String,则+ 是字符串连接,否则是数字加法。因此,x+w 使用数字加法计算(char 不是String),所以它是3 + 43 = 46。然后使用数字加法计算46 + y,得到53。那么53 + "=" 是第一个使用字符串连接求值的子表达式,因为"=" 是一个字符串。
  • 哇,谢谢你这么客气的评论!真的帮了我很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 2020-06-18
相关资源
最近更新 更多