Java-2种基本的数据类型转换

自动类型转换

  • 介绍

    当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这就自动类型转换

  • 数据类型按精度(容量)大小排序为

  • 案例展示:

    public class autoConvert{
    	public static void main(String[] args) {
    		int a = 'c';
    		double d = 80;
    		System.out.println(a);     //99
    		System.out.println(d);     //80.0
    	
    	}
    }

     自动类型转换注意和细节

  1. 有多种类型的数据混合运算时,系统首先将所有数据转换成容量最大的那种数据类型,然后再进行计算

  2. 当我们把精度(容量)大的数据类型赋值给精度(容量)小 的数据类型时,就会报错,反之就会进行自动类型转换

  3. (byte、short)和char 之间不会相互自动转换

     //当把数赋给 byte时,先判断该数是否在byte范围内,如果是就可以(即:先判断范围再判断类型)

    //当把引用变量赋值给byte时, 先判断该数的类型,再判断范围
  4. byte、short、char 它们三者可以计算,在计算时都会首先转换为int类型,只要它们三个中的任何一个出现在计算中都会自动优先转换为int类型,如果是结合出现在运算中,也是优先转换为int类型

  5. boolean 不参与转换

  6. 自动提升原则 : 表达式结果的类型自动提升为 操作数中最大的类型

    public class autoConvertDetail{
    	public static void main(String[] args) {
    		//细节1: 有多种类型的数据混合运算时,
    		//系统首先将所有数据转换成容量最大的那种数据类型,然后再进行计算
    		int n1 = 10;    //ok
    		double d1 = n1 + 1.1;  //ok
    		float f1 = n1 + 1.1; // wrong (n1 + 1.1)是double类型,而f1是float,比double精度低
    
    		//细节2: 当我们把精度(容量)大的数据类型赋值给精度(容量)小 的数据类型时,
    		//就会报错,反之就会进行自动类型转换
    		int n2 = 1.1; // wrong 1.1是double类型,精度比int大
    
    		//细节三: (byte、short)和char 之间不会相互自动转换
    		//当把数赋给 byte时,先判断该数是否在byte范围内,如果是就可以(即:先判断范围再判断类型)
    		//当把引用变量赋值给byte时, 先判断该数的类型,再判断范围
    		byte b1 = 10;   //ok -128~127
    
    		int n2 = 1; n2是int
    		byte b2 = n2; //错误 原因:如果是变量赋值,优先判断数据类型是否能自动转换
    
    		char c1 = b1; //wrong 原因:byte不能自动转换成char
    
    		//细节4: byte、short、char 它们三者可以计算,在计算时都会首先转换为int类型,
    		//只要它们三个中的任何一个出现在计算中都会自动优先转换为int类型,如果是结合出现在运算中,也是优先转换为int类型
    		byte b2 = 1;
    		short s1 = 2;
    		// short s2 = b2 + s1;  wrong,原因:byte、short、char 它们三者可以计算,在计算时都会首先转换为int类型,
    		int s2 = b2 + s1; //对, 
    		byte b4 = b2 + b3; // wrong: byte、short、char只要它们三个中的任何一个出现在计算中都会自动优先转换为int类型,如果是结合出现在运算中,也是优先转换为int类型
    
    		//细节5: boolean 不参与转换
    		boolean pass = true;
    		int num100 = pass; //wrong; boolean不参与自动转换
    
    		//细节6: 自动提升原则 : 表达式结果的类型自动提升为 操作数中最大的类型
    
    		byte b4 = 1;
    		short s3 = 100;
    		int num200 = 1;
    
    		double num300 = 1.1;
    		double num500 = b4 + s3 + num200 + num300; //表达式自动升级为操作数中最大的数据类型double 
    
    
    
    	}
    }
    

强制类型转换 

  • 介绍

    自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,使用时要加上强制转换符().但可能造成精度降低或溢出.要格外注意

  • 案例演示

    public class ForceConvert{
    	public static void main(String[] args) {
    		//演示强制类型转换
    		int n1 = (int)1.9;
    		System.out.println("n1=" + n1); //造成精度损失
    
    		int n2 = 2000;
    		byte b1 = (byte)n2;
    		System.out.println("b1=" + b1); //造成 数据溢出
    
    
    	}
    }
    

    强制类型转换细节说明

  1. 当进行数据大大小从  大---> 小.就需要使用到强制转换
  2. 强转符号只针对于最近的操作数有效,往往使用小括号提升优先级
  3. char类型可以保存 int的常量值,但不能保存 int的变量值,需要强转
  4. byte和short、char类型在进行运算时,当作int类型处理 
    public class ForceConvertDetail{
    	public static void main(String[] args) {
    		//演示强制类型转换
    		//强转符号只针对于最近的操作数有效,往往使用小括号提升优先级
    		int x = (int)10 * 3.5 +  6 * 1.5; //编译错误, double类型,必须强转才能转换为int
    		int x = (int)(10 * 3.5 +  6 * 1.5);  // ok, (int)44.0 --> 44
    		System.out.println(x); //44
    
    
    		//char类型可以保存 int的常量值,但不能保存 int的变量值,需要强转
    		char c1 = 100; //ok
    		int m = 100; //ok
    		char c2 = m; // wrong m是int型,c2 是char型,需要强制转换
    		char c3 = (char)m; // ok
    		System.out.println(c3); // 输出100对应的字母d
    
    	}
    }
    

基本数据类型转换--练习题 

判断是否能通过编译

  1. short s = 12; //ok
  2. s = s - 9; // wrong short在运算时,会自动升级为int类型,所以不能用short类型的s接受赋值 
  3. byte b = 10; //ok
    1. b = b + 1; // wrong byte在运算时,会自动升级为int类型,所以不能用byte类型的b接受赋值
    2. b = (byte)(b + 11); //ok (b+11)是int型,但(byte)(b+11)强制转换为byte型,所以能用byte类型的b接受赋值
  4. char c = 'a'; //ok
  5. int i = 16; //ok
  6. float d = .314F //ok
  7. double result = c + i + d; //ok
  8. byte b = 16; // ok
  9.  short s = 14; // ok
  10. short t = s + b // wrong short、byte类型在进行运算时,会自动转换为int类型,所以(s + b)是int型,不能用short类型的 s变量接受赋值 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值