Saltar al contenido

Java – char, conversiones int

Si encuentras algo que no entiendes puedes dejarlo en la sección de comentarios y trataremos de ayudarte rápidamente.

Solución:

El primer ejemplo (que compila) es especial porque ambos operandos de la suma son literales.

Algunas definiciones para empezar:

  • Convirtiendo un int para char se llama un conversión primitiva de estrechamientoporque char es un tipo más pequeño que int.

  • 'A' + 1 es un expresión constante. Una expresión constante es (básicamente) una expresión cuyo resultado es siempre el mismo y se puede determinar en tiempo de compilación. En particular, 'A' + 1 es una expresión constante porque los operandos de + ambos son literales.

Se permite una conversión restrictiva durante las asignaciones de byte, short y char, Si el lado derecho de la asignación es una expresión constante:

Además, si la expresión [on the right-hand side] es una expresión constante de tipo byte, short, charo int:

  • Se puede usar una conversión primitiva de estrechamiento si la variable es del tipo byte, shorto chary el valor de la expresión constante es representable en el tipo de la variable.

c + 1 es no una expresión constante, porque c es un no-final variable, por lo que se produce un error en tiempo de compilación para la asignación. Al mirar el código, nosotros puede determinar que el resultado es siempre el mismo, pero el compilador no puede hacer eso en este caso.

Una cosa interesante que podemos hacer es esto:

final char a = 'a';
char b = a + 1;

En ese caso a + 1es una expresión constante, porque a es un final variable que se inicializa con una expresión constante.

La advertencia “si […] el valor […] es representable en el tipo de la variable” significa que lo siguiente no compilaría:

char c = 'A' + 99999;

El valor de 'A' + 99999 (cual es 100064o 0x186E0) es demasiado grande para caber en un charporque char es un entero de 16 bits sin signo.


En cuanto al postfijo ++ operador:

El tipo de la expresión de incremento de sufijo es el tipo de la variable.

Antes de la suma, se realiza una promoción numérica binaria* sobre el valor 1 y el valor de la variable. Si es necesario, la suma se reduce mediante una conversión primitiva de reducción y/o sujeto a conversión boxing al tipo de la variable antes de que se almacene.

(* La promoción numérica binaria toma byte, short y char operandos de operadores tales como + y los convierte en int o algún otro tipo más grande. Java no hace aritmética en tipos enteros más pequeños que int.)

En otras palabras, la declaración c++; es mayormente equivalente a:

c = (char)(c + 1);

(La diferencia es que el resultado de la expresión c++si lo asignamos a algo, es el valor de cantes de el incremento).

Los demás incrementos y decrementos tienen especificaciones muy similares.

Operadores de asignación compuestos como += también realiza automáticamente una conversión de restricción, por lo que expresiones como c += 1 (o incluso c += 3.14) también están permitidos.

La conversión de char a int se denomina conversiones de ampliación. En las conversiones de ampliación, los valores no pierden información sobre la magnitud general de un valor numérico, mientras que la conversión de int a char se denomina conversión de reducción. Con la reducción de la conversión, puede perder información sobre la magnitud general de un valor numérico y también puede perder precisión.

Para obtener más información sobre conversiones primitivas, consulte este documento.

Es porque el compilador puede comprobar que ('A' + 1) está dentro de los límites de un char mientras que no puede (en general) verificar que c + está dentro de los límites.

Nos puedes añadir valor a nuestro contenido cooperando tu experiencia en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *