int和long/double类型的相互赋值
代码示例
int a =10;
long b = 20L;
double d = 12.5;
a = b;//编译出错,提示可能会损失精度
a = d;//编译出错,提示可能会损失精度
a = (int)b;//强制类型转换,将long型转成int型,编译通过
a = (int)d;//强制类型转换,将double型转成int型,编译通过
b = a;//编译通过
d = a;//编译通过
long和double表示的范围比int型都大,所以可以将int赋值给long和double,但不能将long和double赋值给int。
结论:
- 不同数字类型的变量之间相互赋值,表示范围小的可以转换为表示范围更大的数据类型,反之则不行
- 强制类型转换:可能会出现精度的丢失,例如double类型10.5强制类型转换为int型变为10,小数点后面的部分会被忽略。
int和boolean相互赋值
代码示例:
int a = 1;
boolean flg = ture;
a = flag;
flg = (boolean)a;
System.out.println(a)//错误,二者之间不可转换
System.out.println(b);//错误,提示不兼容类型
- 整型int和boolean之间的类型转换是不可以的,boolean和其他的类型也是不可以转换的。因为boolean只有ture 和 false两种类型,和其他的数据类型是互不相干的,不能相互转换。
- 强制类型转换不一定成功,互不相干的类型不能随便转换。
字面值常量byte的运算
赋值:
代码示例:
byte a = 100;
byte b = 256;//编译报错,提示,从int型转换到byte可能会有损失
这里呐,我们就要注意,byte表示的数据范围比较小:-128~+127;超过范围就会报错哦!
运算:
代码示例:
byte a = 10;
byte b = 20;
byte c = a + b;//编译出错
byte c = (byte)(a+b);//编译通过
System.out.println(c);
解释出错原因:cpu为了存取数据的速度,他的取值是4个字节4个字节的去取,byte只有一个字节,所以取数据的时候,会提升为4个字节,运行时出错,说变成了int型,避免出错,需要强制类型转换
int和long混合运算
代码示例:
int a = 1;
long b = 20;
//int c = a+b;编译出错,会提示将long转成int会丢失精度
int c =(int)(a+b);//编译通过,强制类型转换
long d = a + b;
System.out.println(c);
结论:如果是int类型和long类型混合运算,得到的结果仍然是long型,如果非得要用int型来接收,就需要强制类型转换。
int和String之间的相互转换
int a = 10;
String str = a + "";//int转String
System.out.println(str); //int转String
String str2 = String.valueof(a);
System.out.println(str2);//String转int