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

2022-09-01 01:29:48

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

int result = +1;   

它似乎具有以下效果:

  • 取消其操作数的框(如果它是包装器对象)
  • 将其操作数提升为 ,如果它不是intint
  • 使包含大量连续加号的邪恶表达式的解析稍微复杂化

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

在这个SO问题中,关于C#中的对应运算符,有人说:“如果你觉得有必要,它就在那里超载。

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


答案 1

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

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

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


答案 2

下面是一元加号对变量的作用的简短演示: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

它是如何工作的:Unary + 或 - 取消装箱它们的操作数,如果它是一个包装器对象,则将其操作数提升为int,如果还不是int或更宽。因此,正如我们所看到的,虽然第一个调用将选择重载(仅取消装箱),但第二个调用将选择的版本。类型的变量将作为参数传入,因为应用了一元加号methodcharintmethodchCharactermethodint


推荐