Java的一元加运算符的目的是什么?

时间:2010-04-12 18:32:40

标签: java language-history unary-operator

Java的一元加运算符似乎来自C,通过C ++。

int result = +1;   

它似乎具有以下效果:

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

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

this SO question中,关于C#中的对应运算符,有人说“如果你觉得有必要的话就会超载”。

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

7 个答案:

答案 0 :(得分:38)

当其操作数的类型为intbytechar时,一元加号运算符会自动转换为short。这称为一元数字促销,它使您可以执行以下操作:

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:7)

以下是一元加号对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重载(仅限取消装箱),但第二次通话会选择int method版本的ch。类型Character的变量method将作为int参数传递给{{1}},因为已应用一元加

答案 3 :(得分:2)

我的猜测就是它,因为有时输入加号可以让事情变得更清晰。你可能想强调一些数字是正数的事实,而不是一些负数。

此外,为了提供一个使用它的真实世界的例子,在世界某些地方,正温度往往总是加上前缀。

答案 4 :(得分:2)

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

答案 5 :(得分:2)

许多其他语言都有一元加号。习惯上包括它,并且吝啬以排除它。它只是编译器中的几行。

答案 6 :(得分:1)

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

  • “+”一元加运算符;表示正值(但没有这个数字是正数)
  • “ -​​ ”一元减运算符;否定表达
  • ++增量运算符;将值增加1
  • - 减少运营商;将值减1 !逻辑补码算子;反转布尔值
  • 的值

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

相关问题