operator bitwise java language-history unary-operator

bitwise - logic operator precedence java



¿Cuál es el propósito del operador unario plus de Java? (7)

Aquí hay una breve demostración de lo que el plus adicional hará con una variable de carácter:

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); }

El resultado de ejecutar este programa es:

char: X int: 88

Cómo funciona: Unario + o - desagrupe su operando, si es un objeto contenedor, luego promocione su operando a int, si aún no es un int o más. Entonces, como podemos ver, mientras que la primera llamada al method elegirá la sobrecarga de char (solo unboxing), la segunda llamada elegirá la versión int del method . La variable ch del tipo Character pasará al method como int argument debido al unario plus aplicado.

El operador unario plus de Java parece haber venido de C, a través de C ++.

int result = +1;

Parece tener los siguientes efectos:

  • Desempaqueta su operando, si es un objeto envoltorio
  • Promueve su operando a int , si aún no es un int o un ancho
  • Complica levemente el análisis de expresiones malignas que contienen un gran número de signos más consecutivos

Me parece que hay formas mejores / más claras de hacer todas estas cosas.

En esta pregunta SO , con respecto al operador de contraparte en C #, alguien dijo que "está allí para ser sobrecargado si siente la necesidad".

Sin embargo, en Java, no se puede sobrecargar a ningún operador. Entonces, ¿este operador unario plus existe en Java solo porque existía en C ++?


El operador unario plus realiza una conversión automática a int cuando el tipo de su operando es byte , char o short . Esto se llama promoción numérica unaria , y le permite hacer cosas como las siguientes:

char c = ''c''; int i = +c;

De acuerdo, es de uso limitado. Pero tiene un propósito. Ver la especificación, específicamente las secciones §15.15.3 y §5.6.1 .


Los operadores unarios hacen lo siguiente para Java:

  • "+" Operador Unario plus; indica valor positivo (sin embargo, los números son positivos sin esto)
  • "-" Operador menos unario; niega una expresión
  • ++ Operador de incremento; incrementa un valor en 1
  • - Disminuir operador; decrementa un valor por 1! Operador de complemento lógico; invierte el valor de un booleano

Fuente: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html


Muchos otros idiomas tienen unary plus. Es habitual incluirlo y pellizcar para excluirlo. Son solo un par de líneas en un compilador.


No lo sé, pero sospecho que está ahí para la simetría con el operador unario negativo (obviamente necesario).


Supongo que está ahí porque a veces escribir el plus hace las cosas más claras. Es posible que desee hacer hincapié en el hecho de que algunos números son positivos, en comparación con algunos números negativos.

Además, para proporcionar un ejemplo del mundo real en el que se usa, las temperaturas positivas suelen ir precedidas de un plus en algunas partes del mundo.


Uno de los objetivos de diseño de Java era familiar (para un desarrollador de C / C ++), así que cuando se trataba de operadores como este, estoy bastante seguro de que tendrían que tener una buena razón para excluirlo, no una buena razón para necesitarlo. .