数据类型转换(自动类型转换和强转)

1.整数默认类型:int
  小数默认类型:double
2.基本类型按照取值范围从小到大排序:
  byte->short->char->int->long->float->double
3.什么时候发生数据类型转换:
  当等号左右两边类型不一致时

目录

1.自动类型转换

2.强制类型转换

3.强转的注意事项


1.自动类型转换

1.什么时候发生自动类型转换
  取值范围大的数据类型 变量名 = 取值范围小的数据类型 -> 小类型自动提升为大类型
2.注意:
  当取值范围小的类型和取值范围大的类型做运算,也会发生自动类型转换,小转大

 

public class Test01{
	public static void main(String[] args){
		/*
		  等号右边:100->默认类型是int
		  等号左边:long型的变量
		  将取值范围小的int型数据赋值给了取值范围大的long型,发生自动类型转换
		*/
		//long num1 = 100;
		long num2 = 100L;
		System.out.println(num2);
		/*
		  等号右边:10->默认类型是int
		  等号左边:double类型的变量
		  将取值范围小的int型数据赋值给了取值范围大的double型,发生自动类型转换
		  int型的值转成double型的
		*/
		double num3 = 10;
		System.out.println(num3);//10.0
		double a = 2.5;
		/*
		  当取值范围小的类型和取值范围大的类型做运算,也会发生自动类型转换,小转大 
		  double = double+int 
		  double = double+double
		*/
		double result = a+10;
		System.out.println(result);
	}
}

2.强制类型转换

1.什么时候需要强制类型转换
  取值范围小的数据类型 变量名 = 取值范围大的数据类型 -> 报错,需要强转
2.怎么强转?
  取值范围小的数据类型 变量名 = (取值范围小的数据类型)取值范围大的数据类型

 

public class Test02{
	public static void main(String[] args){
		/*
		   等号右边:2.5 默认类型为double型
		   等号左边:int型的变量
		   将取值范围大的类型取值给取值范围小的类型->报错->需要强转
		*/
		//int num1 = 2.5;
		int num1 = (int)2.9;
		System.out.println(num1);
		int num2 = (int)100L;
		System.out.println(num2);
		/*
		 等号右边:2.5 默认类型double
		 等号左边:float
		 将取值范围大的类型取值给取值范围小的类型->报错->需要强转
		*/
		//float num3 = (float)2.5;
		float num3 = 2.5F;
		System.out.println(num3);
	}
}

3.强转的注意事项

1.不要随意强转,强转容易导致数据精度损失,以及数据溢出
2.byte,short如果等号右边是常量,只要不超出byte和short的取值范围,不用强转,因为jvm自动强转了
  byte,short如果等号右边有变量参与,结果再赋值给byte,short的变量,byte,short会自动提升为int,需要自己手动强转
3.char类型的数据一旦参与运算,也会被自动提升为int型
  char类型一旦被变成int型,字符会自动去编码表中查询此字符对应的int值->  ASCII码表
  如果字符在ASCII码表中找不到对应的int值,会去unicode码表(万国码)中查询

public class Test03{
	public static void main(String[] args){
		//精度损失
		int num1 = (int)2.9;
		System.out.println(num1);//2
		/*
		  数据溢出现象
          int型占4个字节  1个字节是8个二进制位    
          int型数据最多能用32位二进制表示
          100亿换成二进制:36位二进制
          比int多出来 4位 二进制,会把最前面的4位二进制干掉,这4位是溢出的
          剩下的二进制算回十进制就是1410065408	  
		*/
		int num2 = (int)10000000000L;
		System.out.println(num2);// 1410065408
	}
}

 

public class Test04{
	public static void main(String[] args){		
       byte num1 = 10;
	   System.out.println(num1);   	   
	   /*
	     byte = byte+int		 
		 byte = int+int
	   */
	    //byte result1 = num1+10;	  
	   byte result1 = (byte)(num1+10);
	   System.out.println(result1);	 	   
	   char num2 = 'a';
	   int result02 = num2+0;
	   System.out.println(result02);	   
	   System.out.println('a'+0);//97
	   System.out.println('A'+0);//65
	   System.out.println('0'+0);//48
	   System.out.println(' '+0);//32
	   System.out.println('中'+0);//20013        
       //自动类型转换  char类型的数据会自动提升为int型,去查码表了
	   int num3 = 'a';
	}
}

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何时删库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值