Какова цель унарного оператора плюс в 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