3.3 基本数据类型转换

3.3 基本数据类型转换

数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储,它们的取值范围也各不相同,如:byte类型的变量占用8位,int类型变量占用32位等。下图中依次表示了各数值类型的字节数和相应的取值范围。

在这里插入图片描述

  • 在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整型,其默认类型为int型。

    		System.out.println(1);//int类型
    		System.out.println(1l);//long类型
    
  • 在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。

    		System.out.println(2.0);//double类型
    		System.out.println(2.0f);//float类型
    
数据类型自动转换
  1. 转换顺序

    byte → short → int→ long → float →double

  2. 转换规则

    • int以下的类型计算(byte、short、char)

      所有的byte类型和short类型和char的值运算的,任意两种进行计算,结果都会转成int类型

      //byte + byte = int类型
      byte b2 = 10;
      byte b3 = 20;
      System.out.println(b2 + b3);//该结果为int类型
      //byte b4 = b2 + b3; //该代码将出现错误		
      
      //byte + short = int类型
      short s2 = 10;
      System.out.println(b2 + s2);//该结果为int类型
      //short s4 = b2 + s2; //该代码将出现错误
      
    • int类型及以上类型同类型计算

      int long float double 自身计算的时候没有类型提升

      如:int + int = int ,long + long = long,超出范围最大值或最小值,就会出现物极必反的情况

      int i2 = 2147483647;//int类型最大值
      int i3 = 2147483647;//int类型最大值
      System.out.println(i2 - 1);//返回-2147483648,该返回值为int类型最小值,物极必反
      System.out.println(i2 + i3);//返回-2,此时出现了物极必反
      
    • int long float double 不同类型来计算

      小的数据类型常量或变量将会向大的数据范围转换

      • 如果两个操作数中有一个是double类型,另一个就会转换为double类型
      • 否则,如果有一个操作数是float,另一个就会转化为float;
      • 否则,如果有一个操作数是long,另一个就会转换为long;
      • 否则,两个操作数都将转换为int类型。
    • boolean类型就已经内定了2个值,true和false,所以不能够参与计算

  3. char类型的转换

    转换规则:(char)→ int

    char类型可以参与计算,char和int能够自动转换,因为它们具备一定的对应关系,可以查看ASCII码表

    char型其本身是unsigned型,同时具有两个字节,其数值范围是0 ~ 216-1,因为,这直接导致byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为负数的问题)。

数据类型强制转换

强制类型转换:从存储范围大的类型到存储范围小的类型

double→float→long→int→short(char)→byte

在这里插入图片描述

  1. 整数类型的强转

    大范围→小范围,值不准确

  2. 小数类型的转换

    小数→整数,小数点会去掉

  3. 字符的转换

    char c1 = '中';
    System.out.println((int)c1);//输出20013,表示中这个字符对应的int类型的数字为20013
    int i4 = 97;
    System.out.println((char)i4);//输出a,a字符对应的int类型数字为97
    		
    

注意:由于强转换出现精度丢失问题,所以我们在使用强制转换时,需要明确知道被转换类型能否容纳得下当前值。

基本数据类型练习

1、float f=3.4;是否正确?

2、short s1 = 1; s1 = s1 + 1;有错吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

君哥聊编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值