Java数据类型转换
更新:2022年11月17日09:38:07
数据类型自动转换
规则:小范围数据转为大范围数据类型(byte < short = char < int < long < float < double )
细节:
1.比int小的数据类型进行计算的时候,都会提升为int型进行计算
class Demo {
public static void main(String[] args){
byte a = 10;
short s = 20;
//byte b = a + s; //编译报错 因为 a+s的结果是 int类型
byte b = (byte) (a + s) ;
System.out.println(b);
}
}
2.比int大的数据类型,小范围数据会转为大范围数据进行运算
public class Demo9 {
public static void main(String[] args) {
long lo = 100L;
double d = 3.14;
//int a = lo +d; // 编译报错 long和double运算 long会自动转double
double dou = lo +d;
System.out.println(dou);
long lon = (long) (lo + d);
System.out.println(lon);
}
}
数据类型强制转换
规则:从大范围数据类型,只能强转到小范围数据类型
- 情况1: 转过去 数据就发生改变。 意义不大
int a = 200;
byte b = (byte)a; // 强制类型转换
System.out.println(b); // -56
- 情况2: 转过去之后 数据不发生改变
int c = 100;
byte d = (byte)c; // 意义所在
System.out.println(d);
- 情况3: 小数转整数
double dou = 3.14;
int i = (int)dou;
System.out.println(i); //意义所在
注意事项
boolean不参与任何数据类型的转换
常量优化机制
如果“=”右边的内容全部都是常量,那么在编译时期就可以运算出右边的结果,其实际就是把右边的结果赋值给左边。!比int小的基本数据类型才有
public class Demo11 {
public static void main(String[] args) {
System.out.println(100); // 默认是 int 类型 4个字节。
byte b = 100; // 正确的。 100虽然是int的 但是他是一个常量数据。 常量优化机制
//底层 其实是这样的 byte b = (byte)100;
int a = 100;
//byte c = a; //因为a是变量 只有常量才有 常量优化机制。
byte d = 80 + 20; //正确的 常量优化
// 常量的运算 在编译成class文件的时候, 就已经把 80+20 变成了100
// 也就是说 等这句话 编译到了class文件的时候 就变成了 byte d = 100; 就又符合常量优化机制了。
byte e = 80;
//byte f = e+20; // 编译报错 e是变量
// 以上的特点 ---演示的都是 比int小的 基本类型常量。
// 在基本类型里面 只有 比int小的数据 才遵循常量优化机制。 比int大的没有。
System.out.println(3.14); // 默认是double类型
//float flo = 3.14; // 编译报错 double转float 报错。 比int大的没有常量优化机制。
// 所以我们为了在 一个 小数常量的时候 告诉jvm 我这个小数常量 不再是默认是 double类型了 所以 我们就在小数后面加一个 F
System.out.println(3.14F); // 是float类型
float flo = 3.14F;
System.out.println(b);
}
}
long类型后面为什么加L?
long a = 100L;
将100赋值给a之前,告诉a是一个long类型,否则如果吧>21亿的数赋值给a的时候,就会精度损失!
阅读剩余
版权声明:
作者:Tin
链接:http://www.tinstu.com/50.html
文章版权归作者所有,未经允许请勿转载。
THE END