1.10 CONVERSIONES DE TIPOS DE DATOS (CAST)
2 participantes
Página 1 de 1.
1.10 CONVERSIONES DE TIPOS DE DATOS (CAST)
Con frecuencia se necesita convertir un dato de un tipo a otro sin cambiar el valor que representa. Las conversiones de tipo pueden ser automáticas o explícitas, es decir, solicitadas específicamente por el programador.
Para convertir un objeto de un tipo a un tipo que es subclase del tipo al que pertenece el primer objeto se debe declarar una nueva variable que contenga el nuevo tipo de dato, y al momento de asignar el primer objeto a este objeto se debe poner entre paréntesis (luego del signo = ) el nuevo tipo de dato al que corresponderá,
Conversiones automáticas
En las expresiones pueden intervenir operandos de diferentes tipos y, cuando esto ocurre, para efectuar las operaciones Java intenta realizar conversiones automáticas de tipo. Las conversiones automáticas que podrá efectuar son:
En la operación de asignación convierte el valor a la derecha del signo igual al tipo de la variable, siempre que los tipos sean compatibles y esta operación no ocasione una pérdida de información, es decir, cuando se trate de conversiones como las mostradas en la Figura 2.1.
Por lo general no es necesario utilizar ninguna notación de conversión explícita al asignar un tipo de dato primitivo más pequeño a un tipo más grande.
Ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12 public class MiCodigo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
short z;
byte x=40;
z =x;
}
}
Se está asignando un valor byte (que puede tener valores entre –128 a 127) a una variable tipo short (que tiene valores entre –32768 a 32767), sin necesidad de una conversión explicita.
A continuación se presenta un resumen de algunas de las asignaciones que no requieren de una conversión explicita en Java. Un tipo puede ser asignado a cualquiera de los tipos que están a su izquierda.
double < = float <= long <= int <= short <= byte
Conversiones explícitas
1. Mediante la conversión explicita se le indica al compilador de Java que es intencional la conversión (y que acepta las consecuencias de cualquier pérdida de precisión).
El formato general de conversión es:
(tipo) valor_a_convertir
Para hacer una conversión explicita, sólo debe rodear al tipo de variable con paréntesis, por ejemplo (float). Las siguientes instrucciones convierten un tipo double a float
1
2
3
4
5
6
7
8
9
10
11
12
13 public class MiCodigo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
float resultado;
double valor=12.789561493;
resultado = (float) valor;
}
}
Este tipo de conversiones utiliza los denominados operadores de conversión, molde o cast, y puede ser necesario cuando se precisa un estrechamiento de tipo, conversión en el sentido tipo más alto a tipo más bajo, o en casos como el siguiente para generar una entidad temporal de un nuevo tipo.
El operador molde tiene la misma prioridad que los operadores unarios.
Mediante los operadores molde cualquier valor de un tipo entero o real puede ser convertido a o desde cualquier tipo numérico, pero no se pueden efectuar conversiones entre los tipos enteros o reales y el tipo boolean.
*Conversión directa tipo CAST . Se realiza entre tipos que:
Comparten un conjunto de valores:
Tipos enteros (proceden de un mismo tipo).
Arrays similares: tienen la misma longitud y tienen Arrays similares: tienen la misma longitud y tienen elementos idénticos o convertibles.
Los tipos enumerados no se pueden convertir
2.4.1 Casting
El casting se utiliza cuando Java no puede realizar automáticamente la conversión de tipo, generalmente dado que el receptor tiene menos espacio que el tipo de origen, por lo que se hace necesario un casting.
El casting, pues, es la conversión explícita y se realiza anteponiendo al tipo origen el nombre del tipo al que se desea realizar la conversión entre paréntesis:
int intValue= (int) floatValue;
El casting es automático desde los tipos de pequeña ocupación a los de gran ocupación:
longValue=intValue; /** Permitido. El tipo convertido es menor que el tipo hacia el que se convierte.*/
longValue= (int) intValue; /** Escrito de forma explicita, no necesario para este caso, pero correcto */
Sin embargo si se quiere hacer la conversión a un tipo más pequeño:
intValue=longValue; /** El compilador nos lanzaría un error*/
intValue=(int) longValue; /** Esta permitido, sin embargo corremos el riesgo de perdida de datos*/
En las operaciones pueden entremezclarse cualesquiera tipos decimales, pero el resultado se promociona a un tipo que no dé problemas de desbordamiento:
- Si solo intervienen tipos byte, short, int el resultado es int.
- Si interviene un tipo long el resultado es long.
- Si interviene un tipo float el resultado es float.
- Si interviene un tipo double el resultado es double.
Ejemplo: Creamos un programa llamado ConversionImplicita en la que se declaren variables de tipo byte, char, short, int, float, y double, y se realizan las siguientes operaciones:
1. Resul1 = Multiplicamos el valor float con el valor byte.
2. Resul2 =Dividimos el valor int con el valor char.
3. Resul3 =Multiplicamos el valor double con el valor short.
4. Resul4 =Dividimos el valor int con el valor char.
5. ResulTotal = Resul1 + Resul2 + Resul3 + Resul4
6. Y lo mostramos por pantalla.
class ConversionImplicita {
public static void main(String[] args){
byte sByte=50;
char sChar=”a”;
short sShort=1024;
int sInt=50000;
float sFloat=5.57f;
double sDouble=.1234;
// Conversión Implicita o Automática
float Result1= sFloat*sByte;
int Result2= sInt/sChar;
double Result3= sDouble*sShort;
// Conversion Explicita o Forzada
double Result4= (double) (sInt/schar);
double ResultTotal= Result1 + Result2+ Result3+ Result4;
system.out.print(“el valor total es: “);
system.out.println(Result4);
}}
Cabe destacar en este ejercicio el uso de la variable char como entero. Esto es debido a que una variable char es equivalente al valor entero de dicho carácter en la tabla ASCII, en este caso la letra ‘a’ corresponde con el valor 97. Para más información consultar la tabla ASCII:
Para convertir un objeto de un tipo a un tipo que es subclase del tipo al que pertenece el primer objeto se debe declarar una nueva variable que contenga el nuevo tipo de dato, y al momento de asignar el primer objeto a este objeto se debe poner entre paréntesis (luego del signo = ) el nuevo tipo de dato al que corresponderá,
Conversiones automáticas
En las expresiones pueden intervenir operandos de diferentes tipos y, cuando esto ocurre, para efectuar las operaciones Java intenta realizar conversiones automáticas de tipo. Las conversiones automáticas que podrá efectuar son:
En la operación de asignación convierte el valor a la derecha del signo igual al tipo de la variable, siempre que los tipos sean compatibles y esta operación no ocasione una pérdida de información, es decir, cuando se trate de conversiones como las mostradas en la Figura 2.1.
Por lo general no es necesario utilizar ninguna notación de conversión explícita al asignar un tipo de dato primitivo más pequeño a un tipo más grande.
Ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12 public class MiCodigo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
short z;
byte x=40;
z =x;
}
}
Se está asignando un valor byte (que puede tener valores entre –128 a 127) a una variable tipo short (que tiene valores entre –32768 a 32767), sin necesidad de una conversión explicita.
A continuación se presenta un resumen de algunas de las asignaciones que no requieren de una conversión explicita en Java. Un tipo puede ser asignado a cualquiera de los tipos que están a su izquierda.
double < = float <= long <= int <= short <= byte
Conversiones explícitas
1. Mediante la conversión explicita se le indica al compilador de Java que es intencional la conversión (y que acepta las consecuencias de cualquier pérdida de precisión).
El formato general de conversión es:
(tipo) valor_a_convertir
Para hacer una conversión explicita, sólo debe rodear al tipo de variable con paréntesis, por ejemplo (float). Las siguientes instrucciones convierten un tipo double a float
1
2
3
4
5
6
7
8
9
10
11
12
13 public class MiCodigo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
float resultado;
double valor=12.789561493;
resultado = (float) valor;
}
}
Este tipo de conversiones utiliza los denominados operadores de conversión, molde o cast, y puede ser necesario cuando se precisa un estrechamiento de tipo, conversión en el sentido tipo más alto a tipo más bajo, o en casos como el siguiente para generar una entidad temporal de un nuevo tipo.
El operador molde tiene la misma prioridad que los operadores unarios.
Mediante los operadores molde cualquier valor de un tipo entero o real puede ser convertido a o desde cualquier tipo numérico, pero no se pueden efectuar conversiones entre los tipos enteros o reales y el tipo boolean.
*Conversión directa tipo CAST . Se realiza entre tipos que:
Comparten un conjunto de valores:
Tipos enteros (proceden de un mismo tipo).
Arrays similares: tienen la misma longitud y tienen Arrays similares: tienen la misma longitud y tienen elementos idénticos o convertibles.
Los tipos enumerados no se pueden convertir
2.4.1 Casting
El casting se utiliza cuando Java no puede realizar automáticamente la conversión de tipo, generalmente dado que el receptor tiene menos espacio que el tipo de origen, por lo que se hace necesario un casting.
El casting, pues, es la conversión explícita y se realiza anteponiendo al tipo origen el nombre del tipo al que se desea realizar la conversión entre paréntesis:
int intValue= (int) floatValue;
El casting es automático desde los tipos de pequeña ocupación a los de gran ocupación:
longValue=intValue; /** Permitido. El tipo convertido es menor que el tipo hacia el que se convierte.*/
longValue= (int) intValue; /** Escrito de forma explicita, no necesario para este caso, pero correcto */
Sin embargo si se quiere hacer la conversión a un tipo más pequeño:
intValue=longValue; /** El compilador nos lanzaría un error*/
intValue=(int) longValue; /** Esta permitido, sin embargo corremos el riesgo de perdida de datos*/
En las operaciones pueden entremezclarse cualesquiera tipos decimales, pero el resultado se promociona a un tipo que no dé problemas de desbordamiento:
- Si solo intervienen tipos byte, short, int el resultado es int.
- Si interviene un tipo long el resultado es long.
- Si interviene un tipo float el resultado es float.
- Si interviene un tipo double el resultado es double.
Ejemplo: Creamos un programa llamado ConversionImplicita en la que se declaren variables de tipo byte, char, short, int, float, y double, y se realizan las siguientes operaciones:
1. Resul1 = Multiplicamos el valor float con el valor byte.
2. Resul2 =Dividimos el valor int con el valor char.
3. Resul3 =Multiplicamos el valor double con el valor short.
4. Resul4 =Dividimos el valor int con el valor char.
5. ResulTotal = Resul1 + Resul2 + Resul3 + Resul4
6. Y lo mostramos por pantalla.
class ConversionImplicita {
public static void main(String[] args){
byte sByte=50;
char sChar=”a”;
short sShort=1024;
int sInt=50000;
float sFloat=5.57f;
double sDouble=.1234;
// Conversión Implicita o Automática
float Result1= sFloat*sByte;
int Result2= sInt/sChar;
double Result3= sDouble*sShort;
// Conversion Explicita o Forzada
double Result4= (double) (sInt/schar);
double ResultTotal= Result1 + Result2+ Result3+ Result4;
system.out.print(“el valor total es: “);
system.out.println(Result4);
}}
Cabe destacar en este ejercicio el uso de la variable char como entero. Esto es debido a que una variable char es equivalente al valor entero de dicho carácter en la tabla ASCII, en este caso la letra ‘a’ corresponde con el valor 97. Para más información consultar la tabla ASCII:
ROBERTO URIETA- Mensajes : 1
Fecha de inscripción : 18/02/2014
Revisión Del Grupo
Los felicito por sus participaciones, y para una próxima ocasión los invito a contestar dentro de la sala de discusión que contiene los reactivos, ya que del modo en que usted lo ha hecho, en mi opinión, no es apropiado para contestar preguntas detonadoras, debido a que usted ha abierto una nueva sala, que en teoría se entiende deba utilizarse para un nuevo tema de discusión relacionado con el título del Foro, el cuál será respondido a su vez. Y al parecer con su participación, no ha iniciado algún tema de discusión, sino más bien pretende contestar algún reactivo de otra sala de discusión. Por lo tanto, lo invito para el próximo tema, contestar dentro de la sala, y puede generar nuevos temas afuera, si desea iniciar una nueva discusión en otra temática como una sala de discusión nueva.
ATTE:
M.C. Edgar Rangel Lugo.
ATTE:
M.C. Edgar Rangel Lugo.
Temas similares
» 1.- Fundamentos Del Lenguaje
» 1.- El SGBD y El Lenguaje De Definición De Datos
» 3.- Administración De Bases De Datos
» 1.10 Conversión de Tipos de Datos (Casting o conversión explícita)
» 2.- Lenguaje De Manipulación De Datos (Estructura e Integridad De Bases De Datos
» 1.- El SGBD y El Lenguaje De Definición De Datos
» 3.- Administración De Bases De Datos
» 1.10 Conversión de Tipos de Datos (Casting o conversión explícita)
» 2.- Lenguaje De Manipulación De Datos (Estructura e Integridad De Bases De Datos
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.