数值类型之间的转换与赋值
数值类型之间的转换
6个实现箭头,表示无信息丢失的转换;另外三个箭头,表示可能有精度的损失。例如,123456789是一个大整数,它所包含的位数比float所能表示的位数多。当将这个整数转换为float类型时,将会得到正确的大小,但是会损失一些精度。
public class IntSty {
public static void main (String [] args) {
int n = 123456789;
float m = (float) n;
System.out.println(m); // 1.23456792E8
}
}
当用一个二元运算符连接两个值时(例如n+f,n是整数,f是浮点数),先将这两个操作数转换为同一种类型,然后进行计算。
- 如果两个操作数中有一个是double,另一个操作数就会转换为double类型。
- 否则,如果其中有一个float类型,另一个操作数将会转换为float类型。
- 否则,如果其中有一个为long类型,另一个操作数将会转换为long类型
- 否则,两个操作数都将转换为int类型
所以,java有一些奇怪现象,如short类型与byte类型进行算术运算会得到一个int类型。多个char类型之间进行算术运算将会获得一个int类型值。
public class IntSty {
public static void main (String [] args) {
byte b = 1;
short s = 100;
int i = b * s;
char c1 = 'a';
char c2 = 'b';
char c3 = 'c';
System.out.println(i); // 100
System.out.println(c1 + c2 + c3); //294
}
}
不同类型之间的赋值
如果类型A转换为另一个类型B不会发送精度损失,那么B=A的赋值操作是可以的,反正则编译不会通过。
short s = 10;
int i = 100;
float f = 3.14f;
double d = 171.5;
//short n1 = i; // error
int n2 = s; // ok
//int n3 = f; // error
float n4 = i; // ok
//int n5 = d; // error
double n6 = i; //ok
double n7 = f; // ok