Какова цель унарного плюсового оператора Java? - PullRequest
33 голосов
/ 12 апреля 2010

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

int result = +1;   

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

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

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

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

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

Ответы [ 7 ]

39 голосов
/ 12 апреля 2010

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

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

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

7 голосов
/ 15 апреля 2013

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

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 из-за примененного унарного плюс .

7 голосов
/ 12 апреля 2010

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

2 голосов
/ 13 апреля 2010

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

2 голосов
/ 12 апреля 2010

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

2 голосов
/ 12 апреля 2010

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

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

1 голос
/ 28 сентября 2016

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

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

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

...