42

Java 的一元加号运算符似乎是通过 C++ 从 C 中继承而来的。

int result = +1;   

它似乎具有以下效果:

  • 如果它是包装器对象,则将其操作数拆箱
  • 将其操作数提升为int,如果它还不是一个int或更宽的
  • 使包含大量连续加号的邪恶表达式的解析稍微复杂化

在我看来,有更好/更清晰的方法来做所有这些事情。

这个 SO question中,关于 C# 中的对应运算符,有人说“如果你觉得需要,它就会被重载”。

但是,在 Java 中,不能重载任何运算符。那么这个一元加号运算符是否存在于 Java 中只是因为它存在于 C++ 中?

4

7 回答 7

48

一元加号运算符执行自动转换到int其操作数类型为bytechar或的时间short。这称为一元数字提升,它使您能够执行以下操作:

char c = 'c';
int i = +c;

诚然,它的用途有限。但它确实有一个目的。请参阅规范,特别是第§15.15.3§5.6.1部分。

于 2010-04-12T18:52:29.990 回答
11

下面是一元加号对Character变量的作用的简短演示:

private static void method(int i){
    System.out.println("int: " + i);
}

private static void method(char c){
    System.out.println("char: " + c);
}

public static void main(String[] args) {
    Character ch = 'X';
    method(ch);
    method(+ch);        
}

运行这个程序的输出是:

char: X
int: 88

工作原理:一元 + 或 - 将其操作数拆箱,如果它是包装对象,则将其操作数提升为 int,如果还不是 int 或更宽。因此,正如我们所见,第一次调用method将选择重载(仅拆箱),第二char次调用将选择. 由于应用了一元加号,类型变量将作为参数传递。intmethodchCharactermethodint

于 2013-04-15T12:43:44.610 回答
6

我不知道,但我怀疑它与(显然必要的)一元减号运算符对称。

于 2010-04-12T18:35:10.460 回答
3

Java 的设计目标之一是熟悉(对于 C/C++ 开发人员),所以当涉及到像这样的运算符时,我很确定他们必须有充分的理由来排除它,而不是需要它的好理由.

于 2010-04-12T19:50:22.963 回答
2

我的猜测是它在那里,因为有时输入加号会使事情更清楚。您可能想强调某个数字是正数,而不是某个负数这一事实。

此外,为了提供使用它的真实世界示例,在世界某些地区,正温度往往总是以加号为前缀。

于 2010-04-12T18:50:31.933 回答
2

许多其他语言都有一元加号。习惯上将其包括在内,而将其排除在外。它只是编译器中的几行代码。

于 2010-04-13T07:40:23.723 回答
-3

一元运算符对 java 执行以下操作:

  • +一元加运算符;表示正值(但是,没有这个数字是正的)
  • -一元减号运算符;否定表达式
  • ++增量运算符;将值增加 1
  • --递减运算符;将值减 1
  • !逻辑补码运算符;反转布尔值

来源:https ://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html

于 2016-09-28T01:32:14.160 回答