- 取值范围:byte
- 自动转型
含义:取值范围小 转 取值范围大
byte b = 10; short s = b; int i = s; long l = i; float f = l; double d = f; System.out.println(d); byte b1 = 10; double d1 = b1; System.out.println(d1);
- 强制转型
含义:取值范围大 转 取值范围小
语法:目标类型 变量 = (目标类型)要强转的变量;
double d = 123.123; float f = (float)d;//1.将double类型的d强制转型成float类型 2.再赋值给float类型的变量f long l = (long)f; int i = (int)l; short s = (short)i; byte b = (byte)s; System.out.println(b); double d = 123.123; byte b = (byte)d; System.out.println(b);
- 特殊点
案例一:
byte b1 = 1;//1为int类型的数字字面变量,但是1在byte类型的取值范围内,就直接赋值 //byte b2 = 128;//128为int类型的数字字面变量,但是128不在byte类型的取值范围内,就必须强转 //128 - int : 0000,0000,0000,0000,0000,0000,1000,0000 //(byte)128 :1000,0000 byte b2 = (byte)128; System.out.println(b1);//1 System.out.println(b2);//-128
案例二:
//12345678901为int类型的数字字面量,但是该数字超过了int类型的取值范围,所以会报差错 int i = 12345678901;
案例三:
long l1 = 12345678901;//12345678901为int类型的数字字面量,但是该数字超过了int类型的取值范围,所以会报差错 long l2 = 12345678901L;//12345678901L为long类型的数字字面量,该数字没有超过了long类型的取值范围,所以不会报错
案例四:
float f1 = 1;//int转float,自动转型 //float f2 = 1.0;//double转float,必须强转 //解决方案1: //float f2 = 1.0F;//让系统直接认为1.0是float类型 //解决方案2: //float f2 = (float)1.0;//将double类型强制转型成float System.out.println(f1); System.out.println(f2);
案例五:
char c = 'a'; int i = c; System.out.println(c);//97 - ASCII



