gpt4 book ai didi

java - 这是Java编译器错误还是正确的说法?

转载 作者:行者123 更新时间:2023-12-01 22:18:18 26 4
gpt4 key购买 nike

几天前,我在 java 代码中犯了一个拼写错误,但它编译并运行良好。 (虽然结果很奇怪。)

我的代码是:

public  static  void    main(String args[])  {
String strOut;
char cSEP = '|';
String sSEP = "|";

strOut = "AA" + cSEP + "BB"; // Correct assignment
System.out.println(strOut); // The result is "AA|BB". This is OK.

strOut = "AA" + + cSEP + "BB"; // No Error : no token between two +
System.out.println(strOut); // The result is "AA124BB"

strOut = "AA" + + sSEP + "BB"; // This is compiler error !!!
System.out.println(strOut);
}

我找不到为什么第二个赋值没有错误并且打印了 124。 (当然,“|”在 ASCII 码中是 124。但是为什么是“124”,而不是“|”?)

这是编译器错误吗?或者我还不知道的正确的java语法?

最佳答案

Stringchar 之间的区别非常显着。某些数字运算符在应用于 char 时,会将 char 转换为 int (这称为 unary numeric promotion )。另一方面,仅为 String 定义了二元 + 运算符。

在代码的第二行和第三行中,表达式的解析如下:

strOut = "AA" + (+ cSEP) + "BB";

一元 + 运算符应用于 char 时,会通过一元数字提升将整个表达式转换为 int。该值等于字符的编码值。所以表达式就变成了:

strOut = "AA" + 124 + "BB";

这是有效的。

但是如果将 cSEP 替换为 sSEP:

strOut = "AA" + (+ sSEP) + "BB";

Java 编译器不知道 + sSEP 的含义。没有为 String 定义 + 一元运算符!

关于java - 这是Java编译器错误还是正确的说法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com