Какова цель унарного оператора Java?
Унарный оператор Java, похоже, перешел с C через C ++.
int result = +1;
По-видимому, он имеет следующие эффекты:
- Unboxes его операнд, если это объект-shell
- Способствует его операнду
int
, если он еще не являетсяint
или более широким - Усложняет слегка parsing злых выражений, содержащих большое количество последовательных знаков плюс
Мне кажется, что есть лучшие / более четкие способы сделать все это.
- Должно ли соединение базы данных оставаться открытым все время или только при необходимости открываться?
- Каковы причины, по которым Map.get (Object key) не является (полностью) общим
- Получить строковый символ по индексу - Java
- Как ввести ограничение нескольких столбцов с помощью аннотаций JPA?
- Проверить IPv4-адрес в Java
В этом вопросе SO , касающемся оператора-партнера в C #, кто-то сказал, что «это будет перегружено, если вы почувствуете необходимость».
Однако в Java нельзя перегрузить любой оператор. Таким образом, этот оператор унарного плюса существует в Java только потому, что он существовал на C ++?
- Как установить прокси-сервер, который будет использоваться JVM
- Полноэкранный режим для Java-приложений на OSX Lion
- Нет такого исключения метода Hadoop
- Двунаправленная многозначная карта в Java
- Почему конструкторы в java не имеют типа возврата?
- Когда я запускаю .jar, я получаю сообщение «Нет lwjgl in java.library.path»
- Должны ли ключи JSON быть уникальными?
- Как реализовать TypeAdapterFactory в Gson?
Оператор унарного плюса выполняет автоматическое преобразование в 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 + или – освободить свой операнд, если это объект-shell, затем продвинуть их операнд в int, если он уже не является int или более широким. Итак, как мы видим, в то время как первый вызов method
выберет перегрузку char
(только для unboxing), второй вызов выберет версию method
int
. Переменная ch
типа Character
будет передана в method
как аргумент int
из-за примененного унарного плюса .
Я предполагаю, что это так, потому что иногда набирать плюсы делает вещи более ясными. Вы можете подчеркнуть тот факт, что некоторое число положительно, а не какое-то отрицательное число.
Кроме того, чтобы обеспечить пример реального мира, где он используется, положительные температуры обычно префиксны с плюсом в некоторых частях мира.
Одна из целей дизайна Java была знакома (разработчику C / C ++), поэтому, когда дело касается таких операторов, я уверен, что у них будет сильная причина, чтобы исключить ее, а не повод для ее необходимости ,
Многие другие языки имеют унарный плюс. Обычно принято включать его, и пенни-щипать, чтобы исключить его. Это всего лишь пара строк в компиляторе.
Унарные операторы делают для java следующее:
- «+» Оператор «Унарный плюс»; указывает положительное значение (число положительных без этого, однако)
- «-« Унарный минус-оператор; отрицает выражение
- ++ Оператор приращения; увеличивает значение на 1
- – оператор сокращения; уменьшает значение на 1! Оператор логического дополнения; инвертирует значение булева
Источник: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html