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

Унарный плюс оператор Java, похоже, пришел из C через C++.

int result = +1;   

Похоже, что имеет следующие эффекты:

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

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

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

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

7 ответов

Решение

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

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

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

Вот короткая демонстрация того, что унарный плюс будет делать с переменной 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 или более широким. Итак, как мы видим, пока первый звонок method выберу char перегрузка (только распаковка), второй вызов выберет int версия method, переменная ch типа Character будет передан в method как int аргумент из-за примененного унарного плюса.

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

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

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

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

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

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

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

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

Другие вопросы по тегам