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