Какова цель унарного оператора Java plus?

унарный оператор Java plus, похоже, пришел из C, через c++.

int result = +1;   

он, кажется, имеет следующие эффекты:

  • распаковывает свой операнд, если это объект-оболочка
  • повышает свой операнд к int, если это еще не int или более
  • немного усложняет разбор злых выражений, содержащих большое количество последовательных знаков плюс

мне кажется, что есть лучше / яснее способы сделать все это.

на это так вопрос, относительно оператора-двойника в C#, кто-то сказал, что "он должен быть перегружен, если вы чувствуете необходимость."

однако, в Java, нельзя перегружать любой оператора. Итак, этот унарный оператор plus существует в Java только потому, что он существовал в C++?

7 ответов


оператор unary plus выполняет автоматическое преобразование в int когда тип его операнда byte, char или short. Это называется унарное числовое продвижение, и это позволяет вам делать следующие вещи:

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

конечно, это ограниченное применение. Но у него есть цель. См. спецификацию, в частности разделы §15.15.3 и §5.6.1.


Я не знаю, но я подозреваю, что это для симметрии с (очевидно необходимым) унарным оператором минус.


вот краткая демонстрация того, что унарный плюс сделает с символьной переменной:

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 as int аргумент из-за applied унарный плюс.


Я предполагаю, что это там, потому что иногда ввод плюс делает вещи яснее. Возможно, вы захотите подчеркнуть тот факт, что некоторое число является положительным, а не отрицательным числом.

кроме того, чтобы предоставить пример реального мира, где он используется, положительные температуры, как правило, всегда имеют префикс плюс в некоторых частях мира.


одной из целей дизайна Java было быть знакомым (разработчику C/C++), поэтому, когда дело дошло до операторов, подобных этому, я уверен, что у них должна быть веская причина исключить его, а не хорошая причина нуждаться в нем.


многие другие языки имеют унарный плюс. Его принято включать, а Пенни-щипать, чтобы исключить. Это всего лишь пара строк в компиляторе.


унарные операторы делают следующее для java:

  • "+" оператор "унарный плюс"; указывает положительное значение (числа положительны без этого)
  • "-" унарный оператор минус; отрицает выражение
  • ++ Increment operator; увеличивает значение на 1
  • -- Decrement оператор; уменьшает значение на 1 ! Логический оператор дополнения; инвертирует значение логического

источник: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html