Java - 为什么控制台不会显示字符“+”?

4

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

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”。


相关链接:https://dev59.com/dmoy5IYBdhLWcg3wPLn0 - Lino
2个回答

6
在Java中,char可以隐式转换为整数类型。执行表达式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 + "=",因为"="是一个字符串。 - Andy Turner
哇,谢谢你这么友善的评论!真的帮了我很多。 - Nari

4

这种行为是因为表达式的原因。

x + w + y

实际上被计算为3 + 43 + 7,为什么呢?你可能想知道原因?因为+是一个字符,它实际上是一个数字,而43则是它的整数值。


1
非常感谢!我从来不知道char可以是一个数字! - Nari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接