Java:空格在编译中有影响吗?

5

我正在编写一个程序(类似于Piglatin的东西...), 但是在语句中不小心漏掉了一个变量:

String a = "R"++'a';

实际上应该是String a = "R"+text+'a';。编译器会报错。但是,当我这样写时:

String a = "R"+ +'a';

程序已编译。
我想知道为什么加一个空格会有所不同,尽管Java在某些语句中并不关心你是否加空格,例如:String a="ABCD";String a = "ABCD";相同。
请问有人能解释这种行为吗?

请问你能否把编译器的错误信息发到论坛上吗? - wiredolphin
是的。编译器显示 ';' 期望 并将错误指针放在同一语句上。 - dryairship
4个回答

8

++ 是一个独立的运算符(前缀或后缀自增)。

将其放在字符串和字符字面量之间是不符合语法规则的。

但是使用 "R"+ +'a',第二个 + 会绑定到字符字面量 a 上,并作为一元正号运算符(这个运算符具有非常高的优先级)。这并不是无操作:在 Java 中,它的效果是将 a 的类型从 字符类型 促进为 int 类型。这种类型提升意味着输出将是 R97 而不是 Ra (97 是 a 的 ASCII 码值)。剩余的 + 将作为字符串连接符。


2
因为++是一元运算符,而+ +被解释为以下内容:
  1. "R"+表示字符串连接,然后计算连接的第二个参数。
  2. +'a'表示将符号(+)显式设置为(数值)'a'的字符字面量。因为您已经显式地设置了值的符号,所以它被视为数值类型,因此+'a'的结果是字符'a'的数值表示,这就是为什么结果是R97

同样的,如果你做了String a = "R"+ -'a';,那么'a'的数值(即97)将被取反,结果将是R-97

然而,如果你忽略'a'前面的+符号,那么'a'将被视为字符,而不是数值,结果将是Ra


2

String a = "R"++'a';的意思是"R"++'a'。由于'a'没有被一个+运算符连接,因此错误就在那里。 另一方面,String a = "R"+ +'a';的意思是"R"然后是一个+运算符,然后是一个+'a'(即97)。因此它编译通过。输出将是R97


0

Operator ++用于数字,将其增加1。 当您编写+ + 'c'时,它意味着您想要将字符串和正字符相加。


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