第二天学习JAVASE_006

JAVASE_006节

基本数据类型转换

概念

转换原因

Java是强类型语言,数据类型之间不能随意转换,但运算时数据类型不匹配,所以要转换。

分类

  • 自动类型提升
  • 强制类型转换

自动类型提升

范围小的数据类型可以直接转换为范围大的数据类型

大小排序

数据范围从小到大

int类型以下(byte、short、char、int)运算默认提升为int,int以上计算提升为较大的类型

public class Demo_9{
	public static void main(String[] args){
		//自动类型提升
		//小的范围的数据可以转换为范围大的数据类型
		int i = 10;
		double d;
		
		//将小范围类型的数据i直接赋值给一个大范围数据类型d
		d = i;
		System.out.println(d);
		//注意事项 重点:
		//byte,short,char int这四个类型两两在进行运算的时候。不会提升为较大类型,而是直接
		//提升为int类型
		short b1 = 10;
		short b2 = 20;
		int b3 = b1 + b2;//b1 和b2运算后会默认提升为int类型
		System.out.println(b3);
		
		char c = 'a';
		byte b = 1;
		int s = c + b;
		System.out.println(s);
		
		int m = 100;
		double dou = 200;
		double sum = m + dou;
		System.out.println(sum);
	}
	
}

强制类型转换

大范围数据类型的变量/常量赋值给一个小范围数据类型的变量,需要进行强制转换。

格式

目标数据类型 变量名 = (目标数据类型)原数据类型变量名/原常量值;

强制类型转换可能会损失精度,得到错误的数据

小数类型强制转换为整数类型时,直接舍去小数部分,只保留整数部分

public class Demo_10{
	public static void main(String[] args){
		//强制转换
		int i = 130;
		//byte b = i;//报错,大范围的数据类型不能直接赋值给小范围的数据类型
		//System.out.println(b);
	   //目标数据类型 变量名 = (目标数据类型)原数据类型变量名/原常量值; 
		byte b = (byte)i; //将i进行强制转换,转为byte类型
		System.out.println(b);
		//  int -->00000000 00000000 00000000 10000010  = 128
		
		double d = 12.12;
		int id = (int)d;
		System.out.println(id);
	} 
}

常量优化机制

​ 在编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在该数据类型取值范围内
​ 给一个变量赋值,如果等于号的右边是常量的表达式并且没有一个变量,那么就会在编译阶段计算该表达式的结果,然后判断该表达式的结果是否在左边类型所表示范围内,如果在,那么就赋值成功,如果不在,那么就赋值失败。但是注意如果一旦有变量参与表达式,那么就不会有编译期间的常量优化机制

public class Demo_11{
	public static void main(String[] args){
		//【常量】优化机制
		byte b = 10 + 20;
		System.out.println(b);
		
		byte b1 = 10;
		byte b3 = b1 + 20;//编译会报错,此时没有常量优化机制。默认提升为int类型
		System.out.println(b3);
	}

}

posted @ 2021-03-16 20:00  杨戬帅帅帅  阅读(53)  评论(0)    收藏  举报