Какова цель оператора Java унарный плюс?
Оператор Java yary plus, похоже, перешел с C через С++.
int result = +1;
Кажется, что он имеет следующие эффекты:
- Unboxes его операнд, если это объект-оболочка
- Помогает своему операнду
int
, если он еще не int
или более широкий
- Усложняет слегка разбор злых выражений, содержащих большое количество последовательных знаков плюс
Мне кажется, что есть лучшие/более четкие способы сделать все эти вещи.
В этот вопрос SO, касающийся оператора-партнера в С#, кто-то сказал, что "это будет перегружено, если вы почувствуете необходимость".
Однако на Java нельзя перегрузить любой оператор. Таким образом, этот оператор унарного плюса существует в Java только потому, что он существовал в С++?
Ответы
Ответ 1
Унарный оператор plus выполняет автоматическое преобразование в int
, когда тип его операнда byte
, char
или short
. Это называется унарной численной раскруткой, и это позволяет делать следующие вещи:
char c = 'c';
int i = +c;
Конечно, он ограниченного использования. Но у него есть цель. См. Спецификацию, в частности разделы §15.15.3 и §5.6.1.
Ответ 2
Я не знаю, но я подозреваю это там для симметрии с (очевидно необходимым) унарным минусом.
Ответ 3
Здесь короткая демонстрация того, что унарный плюс будет делать с символьной переменной:
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
из-за применяемого унарного плюса.
Ответ 4
Моя догадка есть, потому что иногда набирать плюсы делает вещи более ясными. Вы можете подчеркнуть тот факт, что некоторое число положительно, а не какое-то отрицательное число.
Кроме того, чтобы обеспечить пример реального мира, в котором он использовался, положительные температуры всегда имеют префикс с плюсом в некоторых частях мира.
Ответ 5
Одна из целей дизайна Java была знакома (разработчику C/С++), поэтому, когда дело касается таких операторов, я уверен, что у них будет сильная причина, чтобы исключить ее, а не веская причина нуждаться в ней.
Ответ 6
Многие другие языки имеют унарный плюс. Обычно принято включать его, и пенни-щипать, чтобы исключить его. Это всего лишь пара строк в компиляторе.
Ответ 7
Унарные операторы выполняют следующие действия для java:
- "+" Унарный плюс оператор; указывает положительное значение (числа положительны без этого, однако)
- "-" Унарный минус-оператор; отрицает выражение
- ++ Оператор приращения; увеличивает значение на 1
- - оператор сокращения; уменьшает значение на 1
! Оператор логического дополнения; инвертирует значение логического
Источник: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html