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的时候,就会精度损失!

阅读剩余
THE END