数据类型的转换

在程序运行的过程中,经常需要将一种数值类型转换成另一种数值类型,这种转换就叫做数据类型的转化。Java的数据类转化分为三种:自动转换,强制转换,类类型的相互转换。下面将一个一个的介绍:

一、自动转换

  在程序运行的时候,有些数据类型的转化由编译器自动完成,而不需要人为的转换,这种转换为自动转换。

  自动转换存在的前提:小范围的数值类型和大范围的数值类型进行运算的时候,小范围的数据的类型会自动的提升转换为大范围数据类型。因此自动转换存在条件是小范围类型到大范围类型的转换。

  •  几个要点
  1. 自动转换只限于数值类型
  2. 自动转换是小类型自动转为大类型
  3. 如果两个操作数中存在一个double类型值,那么另一个操作数就会转为double型
  4. 如果两个操作数中存在一个float类型值,那么另一个操作数就会转为float型
  5. 如果两个操作数中存在一个long类型值,那么另一个操作数就会转为long型
  6. 否则就转为int类型。
  •  数值转换的合法转换图

   

  •  自动转换内存示意图解

  

  说明:图中a为int型,b为byte型,当分配内存的时候,系统为a分配4个字节空间共32位,为b分配一个字节空间,共8位。当a+b时,b的类型为小范围,那么b的类型就会自动提升为int型

 

二、强制转换

  从上面知道,自动转换是小范围类型转成大范围类型,因此由大范围数据转成小范围数据就是强制转换,为什么叫强制转换,是因为这种情况不会自动进行转换,而是需要进行强制转换。因为由大范围转成小范围可能将大范围数据截断,导致数据溢出,因此使用强制转换要注意。如下图示:  

   

  • 特点:从上图中可以看出,强制转换可能会导致丢失一些数据
  • 转换格式:小数据类型 变量名 = (小数据类型) 大数据类型的数据变量;
  • 如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围的话,结果就会截成一个完全不同的值。
  • 强制转换内存图解:

   

 

三、类类型转换

  Java语言的类类型也是可以像话转换的。它有如下的几个方面:

  1. 子类对象可以直接转换成父类对象(多态)
  2. 父类对象也可以转成子类对象,要强制转换
  3. 接口对象也同上面两条一样
  4. String类型和Integer,Double,Float,Boolean等基本包装类之间也可以通过Java提供的方法进行转换(具体查看jdk-help)
  5. 基本数据类型和基本类型包装类之间的相互转换,拆装箱操作
    1. 基本数据类型 ---- > 包装类类型 : 装箱操作
    2. 包装类类型 ---- > 基本数据类型 : 拆箱操作
原文地址:https://www.cnblogs.com/geore/p/7157335.html