¿Por qué necesito lanzar explícitamente primitivas char en byte y corto?
Respecto a las primitivas: cuando lanzo desde tipos más pequeños a más grandes, los lanzamientos son implícitos, cuando hago lanzamientos de tipos más grandes a más pequeños, necesito lanzar las primitivas explícitamente, eso se debe a la pérdida de datos. Pero hay algo que no entiendo. Cuando subo o bajé a char en algunos casos (byte y short), siempre necesito lanzar explícitamente en ambas direcciones, aunque el byte (8bit) encaja en char (16bit).
(ver tambiénhttp://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)
Mira mis ejemplos ...
public class CastingTest
{
public static void main(String[] args)
{
//casting from smaller to bigger types
short c = 13;
int d = c;
byte f = 34;
short g = f;
byte h = 20;
long i = h;
byte var03 = 6;
double var04 = var03;
//casting from bigger to smaller types
int j = 12;
short k = (short)j;
long m = 56;
int n = (int)m;
double o = 19;
short p = (short)o;
//not possible without explicit cast, but why?
byte var01 = 3;
char var02 = (char)var01;
short var05 = 5;
char var06 = (char)var05;
char var07 = 'k';
short var08 = (short)var07;
}
}