java 基本数据类型及自动类型提升

本文深入探讨Java的8种基本数据类型及其所占空间大小,解析自动类型转换与数据类型自动提升规则,并通过实例说明Java强制类型转换的用法与注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Java的8种基本数据类型及其所占空间大小:

-----------------------------------
    boolean    8bit/1byte
-----------------------------------
      byte       8bit/1byte
-----------------------------------
      char       16bit/2byte
-----------------------------------
      short      16bit/2byte
-----------------------------------
    float      32bit/4byte
-----------------------------------
      int        32bit/4byte
-----------------------------------
      long       64bit/8byte
-----------------------------------
      double     64bit/8byte
-----------------------------------

2.Java自动类型转换

     1)两种类型是彼此兼容的

     2)转换的目的类型占得空间范围一定要大于转化的源类型

  正向过程:由低字节向高字节自动转换

    byte->short->int->long->float->double

  逆向过程:使用强制转换,可能丢失精度。

     int a=(int)3.14;

黑线表示无数据丢失的自动数据转换,红线表示转换中可能发生精度丢失

3. Java数据类型自动提升(注意以下讨论的是二元操作符)

 

Java定义了若干使用于表达式的类型提升规则: 

   1)所有的byte型. short型和char型将被提升到int型(例外: final修饰的short, char变量相加后不会被自动提升。)

   2)如果一个操作数是long形 计算结果就是long型;

   3)如果一个操作数是float型,计算结果就是float型;

   4)如果一个操作数是double型,计算结果就是double型;

另一种归纳方式(《Java核心技术卷I》P43):   

  如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。

  否则,如果其中一个操作数是float类型,另一个将会转换为float类型。

  否则,如果其中一个操作数是long类型,另一个会转换为long类型。

  否则,两个操作数都转换为int类型。

eg 1: 

Promote.java class promote 
    {  
        public static void main (string args[]) 
        { 
            byte b = 50;
            char c = 'a';
            short s = 1024; 
            int i = 50000; 
            float f =5.67f; 
            double d =0.1234; 
            double result = (f * b) + (i / c) - (d * s);        
         } 
     }

讲解:

      第一个表达式f * b中,b被提升为float类型,该子表达式的结果也提升为float类型。 

      第二个表达式i / c中,变量c被提升为int类型,该子表达式的结果提升为int类型。

      第三个表达式d * s中,变量s被提升为double类型,该子表达式的结果提升为double型。

      最后,这三个结果类型分别是float,int和double类型,想减后该表达式的最后的结果就是double类型

  5) 黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。

  6) long类型有一个后缀,为" l " 或者" L "。

 eg 2:

byte a = 1;

  byte b = 2;

  a = a+b;      //编译出错自动类型提升成int

  a += b;       //自加没有自动类型提升问题

把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;

eg 3:

 byte b1=1,b2=2,b3,b6; 
 final byte b4=4,b5=6; 
 b6=b4+b5; 
 b3=(b1+b2);   //会发生编译错误
 System.out.println(b3+b6);

没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。

 

4. Java强制类型转换

     格式:目标类型 变量=(目标类型)源类型变量/常量

     eg:

        int i=5;

        byte j=(int)i;

    注意:在强制类型转换中目标类型和源类型变量的类型始终没有发生改变

    易错点:

        byte b;

        b=3;

        b=(byte)b*3    //编译出错,因为(byte)的运算级别比*高,所以会先转换b后再*3

        b=(byte)(b*3)  //正确

 

转载地址:https://www.cnblogs.com/skipping/p/5449019.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值