正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程:使用强制转换,可能丢失精度。
int a=(int)3.14;
1 Promote.java class promote 2 { 3 public static void main (string args[]) 4 { 5 byte b = 50; 6 char c = ‘a‘; 7 short s = 1024; 8 int i = 50000; 9 float f =5.67f; 10 double d =0.1234; 11 double result = (f * b) + (i / c) - (d * s); 12 } 13 }
5) 黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。
6) long类型有一个后缀,为" l " 或者" L "。
eg 2:
1 byte a = 1; 2 3 byte b = 2; 4 5 a = a+b; //编译出错自动类型提升成int 6 7 a += b; //自加没有自动类型提升问题
把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;
eg 3:
1 byte b1=1,b2=2,b3,b6; 2 final byte b4=4,b5=6; 3 b6=b4+b5; 4 b3=(b1+b2); //会发生编译错误 5 System.out.println(b3+b6);
没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
原文:http://www.cnblogs.com/skipping/p/5449019.html