Подтвердить что ты не робот

Какова цель оператора Java унарный плюс?

Оператор Java yary plus, похоже, перешел с C через С++.

int result = +1;   

Кажется, что он имеет следующие эффекты:

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

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

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

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

4b9b3361

Ответ 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