Java nos ayuda a realizar casteo automático de los tipos de datos más chicos a otros más grandes.
Sin embargo, en algunos casos vamos a necesitar realizar un cast manualmente, así como aprendimos en la clase anterior ((dataType) variableOperación).
Por ejemplo: supongamos que declaramos dos variables a y b de tipo int y una variable c de tipo double que es igual a la división de las primeras dos variables.
En este caso, aunque definimos que el tipo de dato de c es double, Java automáticamente convertirá el resultado de la división a tipo int, ya que este es el tipo de datos de las dos variables que dividimos, pero seguirá respetando que la variable c es de tipo double y añadirá un decimal al final (.0).
Esto significa que muchas de nuestras operaciones pueden verse afectadas. Por ejemplo:
int a =30;int b =12;double c = a / b;System.out.println(c);// 2.0 (??)
En este caso, ya que Java convierte nuestras variables automáticamente, debemos indicarle a nuestra variable c (de tipo double) que debe hacer cast de su valor para que Java no altere los valores de las variables y el resultado de la operación sea correcto:
int a =30;int b =12;double c =(double) a / b;System.out.println(c);// 2.5
Es decir, como a y b son de tipo int, el resultado de una operación entre ambas variables será de tipo int, por lo que no tendrá decimales, pero si guardamos el resultado de esta división en una variable de tipo double añadiremos un .0.
Esto podemos solucionarlo si indicamos que además de que la variable c es de tipo double, el valor de esta variable también debe ser de tipo double. Esto significa que Java ejecutará la división entre a y b como si fueran de tipo double, por lo que tendrán decimales a pesar de haber sido definidas inicialmente como números enteros.
Si exactamente, apenas vi el 49 dije la tabla ASCII!
Apuntes que hago en bloc de notas.
Cast entre variables
.::Conversión Automatica::.
byte -> short
short -> int
char -> int
int -> long
long -> float
float -> double
.::Cast Necesario::.
double -> float
float -> long
long -> int
int -> short
short -> byte
char <-> byte
char <-> short
int -> char
49 es la posición del 1 en el código ASCII;
Código de caracteres basados en el alfabeto latino y creado en 1963 por el Comité Estadounidense de Estándares
++Conversión Automática e Conversión Necesaria++
.
49 es el código Ascii del "1"
Un detalle interesante. ¿Por qué Java no castea automáticamente de char a short si ambos tipos de datos ocupan 2 bytes en memoria? Si son del mismo tamaño, por qué no puede castearse automáticamente de char a short? ¿Por qué se dice que short es más pequeño que char si ambos ocupan dos bytes?
Sencillamente porque short utiliza los dos bytes para representar números positivos y negativos (desde -32.768 hasta +32.767 ambos incluidos). Y char utiliza los dos bytes para representar números únicamente positivos (desde 0 hasta 65.535) aunque luego se interpretan como caracteres.
Por eso, la conversión de char a short no es automática.
un char ocupa 1 byte
Gracias, me estaba haciendo la misma pregunta.
Si estás leyendo este comentario, espero verte en el curso de Java orientado a objetos!!
Cada uno de los símbolos de nuestra computadora tienen una referencia numérica, la cual se traduce de su valor en bytes, que se ocupa como trabajo en memoria y procesamiento.
Este tipo de valores suelen agruparse para poder utilizar y conectar cosas como nuestro teclado y pudan ser leídos por nuestra pc.
Existe una tabla completa con esos valores, traducidos a comandos de teclado (Código ASCII), mediante la tecla** "alt" **(de Alternativa), la cual permite realizar con dichos comandos, cada uno de los valores o símbolos, los cuales imprimimos en nuestras pantallas.
Me imagino que 1 a 49 es la suma de los 16 bits del char y los 32 bits del int + 1 = 49 xd
🤔 El casteo implícito también es conocido como conversión automática.
Para los que hasta ahora están aprendiendo: Solo déjense llevar. Tomen sus apuntes y sigan con el curso. No se estresen por los datos que no tienen respuesta en el vídeo como el significado del número 49. Lo digo porque yo soy de los que se estresan cuando no sabe ni por dónde buscar. La vida me ha enseñado que no tengo que aprenderlo todo de una sola tajada. Poco a poco. Besos.
gracias!! 💚
El 49 es el numero 1 en ascii
Exactamente :)
49 es la còdigo numérico del carácter "1"
ya me las olía 🤔👍 XD
Eso es correcto.
¿Porque char no cabe en short? si se supone que ambos equivalen a 2 bytes
OHHHHHHHHHHHHHHHHHHH!!!, ahora si lo entiendo todo, es que no se me ocurrio revisar el rango que tenía el char (como no lo mencionan en la clase, se me fue), Muchas gracias! :D
Bro... por la cantidad de numeros que maneja cada uno
49 es 1 en ASCII
public static void main(String[] args) {
// Exactitud
int a = 30;
int b = 12;
System.out.println("EL NUMERO EXACTO DE PERRTIOS AL MES ES: "+((double) (a/b)));
double c =(double) a/b;System.out.println(c);// CASTING DE CHAR IMPLICITO char n ='1'; int nI = n;System.out.println("CASTING DE CHAR IMPLICITO: "+ nI);// CASTING DE CHAR EXPLICITO char n2 ='1'; short ns =(short) n2;System.out.println("CASTING DE CHAR EXPLICITO: "+ ns);}
En este ejercicio, tenemos un carácter '1' almacenado en una variable llamada "n". Luego, convertimos este carácter en un entero usando una asignación directa de la variable "n" a la variable "nI". Cuando se asigna un valor de tipo char a una variable de tipo int, Java convierte automáticamente el carácter en su equivalente numérico según la tabla ASCII. Por lo tanto, en este caso, el carácter '1' se convierte en su equivalente numérico, que es 49.
Luego, utilizamos el método println() para imprimir el valor de la variable "nI". La salida de este código será 49 porque es el valor numérico asociado al carácter '1' en la tabla ASCII.
Es importante tener en cuenta que cuando se convierte un carácter en un entero, la conversión solo funciona si el carácter representa un dígito del 0 al 9. Si el carácter no representa un dígito válido, el resultado de la conversión será diferente.
Gracias por la aclaración. Tenía la duda de donde salía el dato.
Es el códgo ASCII del número 1
gracias amigo
¿Cómo podría convertir un string en un entero y que este sea el número del string?
Es decir pasar de "23" a 23 por ejemplo
Podrías utilizar el Wrapper (la clase que representa a un valor tipo primitivo), en este caso el de la clase Integer, por ejemplo
Integer.parseInt("23");
String numero = "23";
Integer.parseInt(numero)
Hola, quisiera saber cual es la diferencia entre hacer casteo y usar el método parseInt, parseDouble, etc
Hola Oliver, el casteo solo puede transformas tipos de datos similares entre sí, usualmente por la herencia, en cambio los métodos de parseo toman un tipo de dato y lo transforman a otro solo si es compatible, casi siempre texto a numéricos
En el caso de tipos de datos primitivos, el cast, ya sea implicito o explicito convierte entre tipos, pero no entre cadenas, es decir, puedo pasar de
int a float ( es un cast implicito)
int var1=5;float var2 =var;
o al reves de float a int(cast explicito)
float var3 =2.5;int var4 =(float)var3;
aqui se trunca la parte decimal
mientras el numero de bits que tuiliza el tipo de dato sea menor se puede hacer implicito, te pongo una tabla
COn cadens es difernte tienes que parsear los valores para convertiur a tipo numerico