Какова цель унарного оператора Java?

Унарный оператор Java, похоже, перешел с C через C ++.

int result = +1; 

По-видимому, он имеет следующие эффекты:

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

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

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

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

Оператор унарного плюса выполняет автоматическое преобразование в 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

  • Чтение содержимого из файлов, находящихся внутри Zip-файла
  • Функции обратного вызова в Java
  • Когда для генерации Java требуется вместо и есть ли недостаток переключения?
  • Что такое «собственная сторона» в сопоставлении ORM?
  • Дождитесь загрузки страницы в Selenium
  • Как я могу сделать запрос POST с помощью multipart / form-data с использованием Java?
  • Тест JUnit для System.out.println ()
  • Сделать DocumentBuilder.parse игнорировать ссылки DTD
  • Java Generics WildCard Вопрос: Список
  • Дата календаря в формате yyyy-MM-dd в java
  • Нуль для примитивных типов данных
  • Interesting Posts

    Как выбрать последний дочерний элемент в jQuery?

    Проблемы с ключом win и ключом справа после Windows Update (польские диакритические знаки не работают)

    Сделать приложение для Android недоступным для планшетов

    Как вертикально центрировать divs?

    Создание контроля прозрачным

    Удалите все файлы старше 365 дней, но исключайте определенные папки

    Неправильно ли использовать break для выхода из цикла в Java?

    Проверьте, существует ли свойство в classе

    Как ускорить мой компьютер для просмотра нескольких вкладок?

    MemoryCache Empty: возвращает null после установки

    Нужны ли мне все версии Microsoft .NET Framework?

    Может ли 32-разрядная операционная система использовать весь файл 8GB RAM + 20GB?

    В чем разница между «текстом» и новой строкой («текст»)?

    В чем разница между сериализацией и маршалингом?

    Почему частота кадров в WPF нерегулярна и не ограничена для мониторинга обновления?

    Давайте будем гением компьютера.