为什么在Java中`+ 1`是一个有效的表达式?

4
以下是代码块:
class Main {
  public static void main(String[] args) {
    System.out.println( + 1);
  }
}

可以在Java 1.8上编译。

当运行此代码时,将打印1

System.out.println(+ + 1);也会打印1

然而++1无法编译通过。

+ + "str"无法编译通过。

+ + true无法编译通过。

因此,看起来它仅支持int、long和double。

为什么这个表达式对于上述数据类型是有效的呢?


你期望通过执行 ++1 发生什么? - Nicholas K
“++1” 失败是可以理解的,因为没有变量来进行递增和存储,但我想知道为什么 “+ + 1” 可以编译通过。 - Prathik Rajendran M
顺便说一句,我在添加一个字符的字符串时偶然发现 "test" + + '}' 是一个有效的表达式,于是我开始思考为什么它被允许。 - Prathik Rajendran M
1 是一个可以写成 +1 的正数,同样的负数可以写成 -1(但不是表达式而是字面量)。为了对表达式结果进行否定,您可以在表达式前加上减号 -exp => 要否定表达式 +1 的结果,您可以写成 -+1。现在这应该让您明白为什么 ++1 是有效的,以及 +-1-----1 也是有效的。 - Grijesh Chauhan
@GrijeshChauhan,我认为你在“无效”和“有效”之间的评论末尾拼错了。 “....为什么++1有效,而+-1或-----1也有效”。 - Jabongg
3个回答

6
这是一元加表达式,它的存在只是为了补充一元减表达式。
只有数字类型支持它,因为对于其他类型来说,这没有任何意义。
++1无法编译,因为++是递增表达式,需要变量或字段作为子表达式。

明白了,这个答案也很有帮助 https://dev59.com/O3E85IYBdhLWcg3wwWat - Prathik Rajendran M

1

+1不是一个表达式,它是明确表示正数1的方式。另一方面,++1是对变量1的预增量表达式,但该变量不存在,以数字开头的变量名也是非法的。+ + 1相当于+(+(1))


1
因为在空格分隔的情况下,+ 被视为一元运算符。
例如:
- - 5 => -(-5) => 5

同样地。
+ + 5 => +(+5) => 5

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