No entiendo bien el casting

Pues eso, estoy con java y no entiendo muy bien lo del casting. Sé que está el automático y el explícito (que es el que haces tú) pero no sé con qué finalidad se hace y no lo entiendo muy bien.
A ver voy a intentar una explicación sencilla:

Los castings se suelen usar mucho en los TAD (tipos abstractos de datos) como por ejemplo una lista ArrayList.

Si tienes objetos de tipo "Coche" por ejemplo metidos en un ArrayList al hacer un get (i) te devolverá un objeto tipo Object y por lo tanto solo podrias acceder a los métodos que tiene Object y no a los métodos que tiene Coche.

Entonces para indicarle al compilador que ese objeto que ha devuelto es un objeto tipo Coche hay que hacer el casting:

Coche audi = (Coche) lista.get(i);

No se si te habrá quedado muy claro, pero la cuestion es que si llamas a una funcion que te devuelve un supertipo del objeto que estas utilizando, si quieres usar metodos especificos del objeto que no estan en el supertipo hay que hacer un casting.
Mejor aún.

int numero = 3;
float flotante = numero;

Aquí no pasa nada, te hace el casting automáticamente por que almacena una variable de tipo int en una float y puede sin perder datos.

pero si lo haces al revés.

float flotante = 3.99999;
int numero = flotante;

Aquí el compilador te dará error ,pues pierdes datos, es decir, no hay manera de meter un flotante en un integer sin perder datos, para ello tienes que forzarlo.

int numero = (int) flotante;

Tienes que decirle al compilador que eres consciente de que vas a perder datos. XDD
Pues muchas gracias, ya lo tengo claro.

Ya que estamos... ¿Y eso de tener que ponerle una f o una l?
Me explico...

long a = 88888888L; ¿Por qué esa "L"?


Según lo que he entendido, para java, el entero de refencia es el "int", y si intentas meter un valor más grande de los que admite "int", tienes que decirle que no, que tu variable es un long, y la forma es con esa L... ¿Cierto? Creo que no xD
3 respuestas