Conversiones y promociones en Java
En este artículo discutiremos la conversión primitiva .
· Conversión de tipos
∘ Conversión de tipos implícita
∘ Conversión de tipos explícita
· Promoción automática de tipos en expresiones
· Diferencia entre conversión de tipos y coerción de tipos
En informática, la conversión de tipos , la conversión de tipos , la coerción de tipos y el malabarismo de tipos son formas diferentes de cambiar una expresión de un tipo de datos a otro. Un ejemplo sería la conversión de un valor entero en un valor de punto flotante o su representación textual como una cadena y viceversa. Las conversiones de tipos pueden aprovechar ciertas características de las jerarquías de tipos o las representaciones de datos. Dos aspectos importantes de una conversión de tipo son si ocurre implícitamente (automáticamente) o explícitamente , y si la representación de datos subyacente se convierte de una representación a otra, o si una representación dada simplemente se reinterpreta.como la representación de otro tipo de datos. En general, se pueden convertir tipos de datos primitivos y compuestos.
Cada lenguaje de programación tiene sus propias reglas sobre cómo se pueden convertir los tipos. Los lenguajes con escritura fuerte generalmente realizan pocas conversiones implícitas y desalientan la reinterpretación de representaciones, mientras que los lenguajes con escritura débil realizan muchas conversiones implícitas entre tipos de datos. El lenguaje de escritura débil a menudo permite obligar al compilador a interpretar arbitrariamente un elemento de datos como si tuviera diferentes representaciones; esto puede ser un error de programación no obvio o un método técnico para tratar directamente con el hardware subyacente.
Java proporciona varios tipos de datos, probablemente cualquier otro lenguaje dinámico, como boolean, char, int, unsigned int, signed int, float, double, long, etc. En total, proporciona 7 tipos en los que cada tipo de datos adquiere un espacio diferente mientras se almacena en la memoria.
Conversión de tipo
Si tiene experiencia previa en programación, entonces ya sabe que es bastante común asignar un valor de un tipo a una variable de otro tipo. Si los dos tipos son compatibles, entonces Java realizará la conversión automáticamente (conversión de tipo ) . Por ejemplo, siempre es posible asignar un valor int a una variable larga. Sin embargo, no todos los tipos son compatibles y, por lo tanto, no se permiten implícitamente todas las conversiones de tipos . Por ejemplo, no hay una conversión automática definida de doble a byte. Afortunadamente, todavía es posible obtener una conversión entre tipos incompatibles. Para ello, debe utilizar un cast , que realiza un explícitoconversión entre tipos incompatibles. Veamos las conversiones de tipo automáticas o de ampliación ( coerción de tipo , malabarismo de tipo ) y la conversión de reducción o explícita ( conversión de tipo ).
Como puede ver, es posible realizar una conversión en un valor numérico así como en una variable. Tenga en cuenta que puede introducir moldes superfluos; por ejemplo, el compilador promoverá automáticamente un valor int a long cuando sea necesario. Sin embargo, se le permite usar moldes superfluos para hacer un punto o aclarar su código. En otras situaciones, una conversión puede ser esencial solo para compilar el código.
En C y C++, la conversión de tipos puede causar algunos dolores de cabeza. En Java, la conversión es segura, con la excepción de que cuando realiza una conversión de estrechamiento (es decir, cuando pasa de un tipo de datos que puede contener más información a uno que no contiene tanta), ejecuta el riesgo de perder información. Aquí, el compilador lo obliga a usar una conversión (conversión de tipos) , de hecho, dice: "Esto puede ser algo peligroso; si quiere que lo haga de todos modos, debe hacer que la conversión sea explícita" ..” Con una conversión ampliada, no se necesita una conversión (conversión explícita), porque el nuevo tipo contendrá más que la información del tipo anterior para que nunca se pierda información. Java le permite convertir cualquier tipo primitivo a cualquier otro tipo primitivo, excepto booleano, que no permite ninguna conversión. Los tipos de clase no permiten el casting. Para convertir uno a otro, debe haber métodos especiales. (…)
Conversión de tipos implícita
También conocido como 'conversión automática o de tipo wedninig'.
- Realizado por el compilador por su cuenta, sin ningún disparador externo por parte del usuario.
- Generalmente tiene lugar cuando en una expresión está presente más de un tipo de datos. En tal condición, la conversión de tipo (promoción de tipo) tiene lugar para evitar la pérdida de datos.
- Todos los tipos de datos de las variables se actualizan al tipo de datos de la variable con el tipo de datos más grande.
bool -> char -> short int -> int ->
unsigned int -> long -> unsigned ->
long long -> float -> double -> long double
Es posible que las conversiones implícitas pierdan información, los signos se pueden perder (cuando firmado se convierte implícitamente en sin firmar) y se puede producir un desbordamiento (cuando long long se convierte implícitamente en float).
a veces nos referimos a este tipo de conversión como tipo ceorcion.
En Java, el mecanismo de convertir un tipo de objeto en otro objeto de un tipo diferente con un contenido similar se conoce como coerción. En otras palabras, podemos decir que la coerción es el proceso de convertir un tipo de datos a otro tipo de datos. De manera más específica, la conversión implícita se llama coerción . También se conoce como coerción de tipo .
En el tipo ceorcion , un compilador convierte automáticamente un tipo de datos en otro tipo de datos en el momento del compilador. En el tipo ceorcion , el tipo de datos de destino no puede ser más pequeño que el tipo de datos de origen, por eso también se denomina conversión de ampliación. Una cosa más importante es que solo se puede aplicar a tipos de datos compatibles.
Escriba Ceorcion ejemplo –
int x=30;
float y;
y=x; // y==30.000000.
Java forzará automáticamente los datos en la dirección de las flechas, ya sea sólido o discontinuo. Por ejemplo:
Las coerciones que atraviesan una flecha punteada están permitidas, pero pueden resultar en una pérdida de precisión. Significa que el valor convertido puede no ser igual al valor inicial. Por ejemplo:
El compilador produce un error si alguna declaración intenta forzar los datos en contra de la dirección de las flechas.
Veamos un ejemplo de conversión implícita de tipos en Java.
Aquí, convertiremos un valor int en un valor largo y finalmente en un valor doble usando un operador de asignación simple:
public class Main {
public static void main(String[] args) {
int a = 20;
long b = a; //implicit casting from int to long data type
double c = b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
} // implicit casting from long to double data type
20
20
20.0
En otras palabras, la "conversión de tipo" se refiere al proceso general de cambiar un tipo, mientras que la coerción de tipo se refiere más específicamente a la conversión implícita de un tipo. Podemos subdividir aún más la coerción de tipos en dos tipos: controlada por el programador y controlada por el compilador (a veces denominada malabarismo ).
Conversión de tipo explícita
Aunque las conversiones automáticas de tipo son útiles, no satisfarán todas las necesidades. Por ejemplo, ¿qué sucede si desea asignar un valor int a una variable de byte? Esta conversión no se realizará automáticamente, porque un byte es más pequeño que un int. Este tipo de conversión a veces se denomina conversión de tipos y está definida por el usuario.
Este proceso también se denomina conversión de tipo de reducción, ya que explícitamente hace que el valor sea más estrecho para que se ajuste al tipo de destino.
Para crear una conversión entre dos tipos incompatibles, debe utilizar una conversión de tipos. Una conversión es simplemente una conversión de tipo explícita.
En Java, se puede hacer usando un operador de conversión () :
Esto se hace definiendo explícitamente el tipo requerido delante de la expresión entre paréntesis.
Tiene esta forma general:
(target-type) expression
Aquí, target-type especifica el tipo deseado para convertir el valor especificado. Por ejemplo, el siguiente fragmento convierte un int en un byte . Si el valor del entero es mayor que el rango de un byte , se reducirá el módulo (el resto de la división de un entero por) el rango del byte.
int a;
byte b; // …
b = (byte) a;
El siguiente programa muestra algunas conversiones de tipos que requieren conversiones:
// Demonstrate casts.
class Conversion {
public static void main(String args[]) {
byte b;
int i = 257;
double d = 323.142;
System.out.println("\nConversion of int to byte.");
b = (byte) i;
System.out.println("i and b " + i + " " + b);
System.out.println("\nConversion of double to int.");
i = (int) d;
System.out.println("d and i " + d + " " + i);
System.out.println("\nConversion of double to byte.");
b = (byte) d;
System.out.println("d and b " + d + " " + b);
}
}
Conversion of int to byte. i and b 257 1
Conversion of double to int. d and i 323.142 323
Conversion of double to byte. d and b 323.142 67
Veamos un ejemplo de conversión explícita en Java:
public class Main {
public static void main(String args[]) {
double d = 57.17;
int i = (int)d; // Explicit casting from long to int data type
System.out.println(d);
System.out.println(i); //fractional part lost
}
}
57.17
57
57
Promoción automática de tipos en expresiones
La promoción de tipos es una ocurrencia común en la programación de Java, que se puede lograr automáticamente con tipos de datos primitivos mediante el uso de la promoción de tipos automáticos. También se conoce como promoción automática de tipos de datos.
Como sabrá, además de las asignaciones, hay otro lugar donde pueden ocurrir ciertas conversiones de tipos: en las expresiones.
A continuación se muestra una ilustración esquemática de posibles promociones de tipo:
Descubrirá que si realiza operaciones matemáticas o bit a bit en tipos de datos primitivos que son más pequeños que un int (es decir, char, byte o short), esos valores se promoverán a int antes de realizar las operaciones y el resultado el valor será de tipo int. Entonces, si desea volver a asignar al tipo más pequeño, debe usar un molde. (Y, dado que está asignando de nuevo a un tipo más pequeño, es posible que esté perdiendo información). En general, el tipo de datos más grande en una expresión es el que determina el tamaño del resultado de esa expresión; si multiplicas un flotante y un doble, el resultado será el doble; si agrega un int y un long, el resultado será largo.
Para entender más:
considera lo siguiente. En una expresión, la precisión requerida de un valor intermedio a veces excederá el rango de cualquiera de los operandos. Por ejemplo, examine la siguiente expresión:
byte a = 40;
byte b = 50;
byte c = 100;
int d = a * b / c;
A pesar de lo útiles que son las promociones automáticas, pueden causar errores confusos en tiempo de compilación. Por ejemplo, este código aparentemente correcto causa un problema:
byte b = 50;
b = b * 2; // Error! Cannot assign an int to a byte!
En los casos en los que comprenda las consecuencias del desbordamiento, debe utilizar una conversión explícita, como
byte b = 50;
b = (byte)(b * 2);
Reglas para la promoción automática de tipos
Se deben seguir las siguientes reglas para la promoción de tipos al ejecutar expresiones en Java para lograr resultados correctos:
- Todas las variables de los tipos byte , short y char deben promocionarse automáticamente a int .
- Si cualquier variable que participa en una operación es larga , el resultado de la operación debe ser largo .
- Si cualquier variable que participa en una operación es flotante , el resultado de la operación debe flotar .
Veamos algunos ejemplos de Java que representan las reglas de promoción numérica en Java.
1- Cuando uno de los operandos es doble.
public class PromotionExample {
public static void main(String[] args) {
int i = 30;
double d = 2.5;
double result = i * d;
System.out.println("Result is- " + result);
}
}
// output :
// Result is- 75.0
2- Cuando uno de los operandos es float.
public class PromotionExample {
public static void main(String[] args) {
short s = 4;
int i = 30;
float f = 6.75f;
float result = (s+i) * f;
System.out.println("Result is- " + result);
}
}
//output
// Result is- 229.5
3- Intentar asignar el resultado a int cuando uno de los operandos es flotante.
public class PromotionExample {
public static void main(String[] args) {
byte a= 100;
byte b= 50;
int i= 80;
float f = 80;
result = f/i *b; // line 6
}
}
error line 6
Veamos la diferencia entre Type casting y Type Coercion que se dan a continuación:
- En la conversión de tipos, un programador convierte un tipo de datos en otro tipo de datos utilizando un operador de conversión. Mientras que en la coerción de tipos, un compilador convierte un tipo de datos en otro tipo de datos.
- La conversión de tipos se puede aplicar tanto a tipos de datos compatibles como a tipos de datos incompatibles . Mientras que la coerción de tipos solo se puede aplicar a tipos de datos compatibles .
- En la conversión de tipos, se necesita un operador de conversión para convertir un tipo de datos en otro tipo de datos. Mientras que en la coerción de tipos, no se necesita un operador de conversión.
- En la conversión de tipo ( conversión de tipo explícita ), el tipo de datos de destino puede ser más pequeño que el tipo de datos de origen, al convertir el tipo de datos a otro tipo de datos. Mientras que en la coerción de tipo ( conversión de tipo implícito ), el tipo de datos de destino no puede ser más pequeño que el tipo de datos de origen.
- La conversión de tipos se lleva a cabo durante el diseño del programa por parte del programador. Mientras que la conversión de tipos ( conversión de tipos implícitos ) se realiza en el momento de la compilación.
- La conversión de tipos también se denomina conversión de restricción porque, en este caso, el tipo de datos de destino puede ser más pequeño que el tipo de datos de origen. Mientras que la coerción de tipos ( conversión de tipo implícito ) también se denomina conversión de ampliación porque, en este caso, el tipo de datos de destino no puede ser más pequeño que el tipo de datos de origen.
- La conversión de tipos se usa a menudo en trabajos de codificación y programación competitiva. Mientras que la coerción de tipos ( conversión de tipo implícito ) se usa menos en codificación y programación competitiva, ya que podría causar una respuesta incorrecta.
- La conversión de tipo es más eficiente y confiable. Mientras que la coerción de tipo ( conversión de tipo implícito ) es menos eficiente y menos confiable.
Apoya nuestra publicación siguiéndola
Consulte también los siguientes artículos.
2023 React JS Trends to Watch The Click jacking y sus medidas preventivas Integración de Splunk con SpringBoot Parte — 1 Codificación: compruebe si dos cadenas son anagramas en Javascript Por qué Java es el lenguaje de programación más querido del planeta Comprender los métodos en Java 5 Preguntas comunes de JavaScript: Introducción a Spark Architecture 25. Subárbol de búsqueda binaria más grande (BST)
![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































