Java的一元加运算符似乎来自C,通过C ++。
int result = +1;
它似乎具有以下效果:
int
,如果它还不是int
或更宽在我看来,有更好/更清晰的方法来做所有这些事情。
在this SO question中,关于C#中的对应运算符,有人说“如果你觉得有必要的话就会超载”。
但是,在Java中,不能重载任何运算符。因此,这个一元加运算符只存在于Java中,因为它存在于C ++中吗?
答案 0 :(得分:38)
当其操作数的类型为int
,byte
或char
时,一元加号运算符会自动转换为short
。这称为一元数字促销,它使您可以执行以下操作:
char c = 'c';
int i = +c;
答案 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执行以下操作:
来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html