数据类型的精度由低到高为:byte < short < char < int < long < float < double
低精度的类型与高精度的类型在进行运算时,低会自动转换为高,而如果非要把结果转为低精度的类型,需要进行强制转换。(犹如小杯里的水倒入大杯子里,可以;但是大杯里的水想要倒入小杯里可能会溢出,那高精度的同理可能会出现精度丢失。)
(1)byte、short、char型参与运算时,低于int型都会自动转换为int型(使用“+=”运算符除外),然后对int型的值进行计算,得到的结果也为int型。这些类型的变量与高于int类型(如:long、float、double)的变量一起运算时,会自动转换为高精度的类型。其中char类型的数据会转换为对应的ASCII码。
举个不常规,但掌握语法的例子:
byte b1=1;
long b2=3;
float b3=b1+b2;//此时b3=4.0 首先b1+b2的结果为long型,赋值给b3时自动转换为float型
byte型示例:
1.
byte b1=1,b2=2;
int b=b1+b2; //如果把两个byte型的值相加,得到的结果是int型
2.
byte b1=1,b2=2;
b1=(byte)(b1+b2); //如果要得到byte型的结果,需强转为byte型[注意转换的是结果,不要忘记给b1+b2加括号]
3.
short a=128; // a=128
byte b=(byte)a; // b=-128
short类型占2个字节,a对应的二进制为:00000000 10000000,由于byte占1个字节,在强制转换为byte时只能存下低字节部分:10000000,10000000是-128的补码,所以b为-128。
short型示例:
1.
short s1=1,s2=2;
s1=s1+s2; //编译错误,如果把两个short型的值相加,得到的结果是int型
改正:
short s1=1,s2=2;
s1=(short)(s1+s2); //如果要得到short型的结果,需强转为short型
3.
short s1=1;
s1=s1+1; //编译错误,s1会转换为int型,结果也为int型,而s1定义类型为short型
改正:
short s1=1;
s1=(short)(s1+1);
例外情况:
“+=”运算符,不会产生类型的转换,Java编译器会对其进行特殊处理。
short s1=1;
s1+=1; //能够编译通过
char型示例:
char c1='a',c2='b';
int c=c1+c2; //得到的结果是int型
c1=(char)(c1+c2); //得到的结果是int型,如果想得c1为字符,需要char强制转换
(2)boolean类型不与其它类型转换,其值只有true和false,注意不像C语言可以为0或非0代表真或假。
示例:
int i=1;
if(i)
System.out.println("true");
else
System.out.println("false");
编译错误,if条件只能是boolean类型的值(true或false),而 i 的类型为 int。
(3)整型字面值默认为int型,若用long型定义,需要在字面值末尾加l或L。
如:long l=5543876532345678653L; 或 long l=5543876532345678653l;
浮点型字面值默认为double型,若用float型定义,需进行类型转换。
float型变量初始化这三种形式均可:1.float f=1.0f; 2.float f=1.0F; 3.float f=(float)1.0;