对于相同数据类型(整型、浮点型)的两个变量,当存储小范围数据的变量需要赋值给存储大范围数据的变量时,只需要直接赋值给存储大范围的变量即可,我们把这一赋值过程叫做向上转型,同时需要注意的是这个过程是自动的,无需咱们给它加上额外的操作
理解:以一瓶售价2.0元的纯净水和一个空的烧水壶为例,当你把纯净水倒入到烧水壶时,发现纯净水并没有溢出,这个时候表明纯净水在倒水过程中没有什么损失,因此把纯净水倒入到空的烧水壶是合理。同理,一个变量存储小范围的数据,把其赋值给一个定义了更大范围的变量,此时大范围的变量的空间是完全装得下小范围的变量,在赋值过程中不会产生什么损失,因此这是合理的,合理就无需加上其他额外条件,这种合理的用法用的场景很多,因此java就让其自动类型转换了。
测试一些临界条件时,可能会超出变量定义的范围,此时就需要用一个更大范围定义的变量去进行测试操作.
核心:直接把小范围数据的变量名赋值给大范围数据的变量名
语法如下:
把小范围变量名设为m,大范围变量名设为n,大范围、小范围指的是数据类型取值范围
m对应的数据类型 m=变量值;
n对应的数据类型 n=m;
例如:要把byte类型的数据向上转型成int类型的数据时,可以进行如下操作
byte number01=5;
int number02=number01;
//此时byte类型的数据5就自动转换成int类型的数据,
//并把其赋值给了定义为int类型的变量number02,此操作实现了向上转型(自动类型转换)
对于相同数据类型(整型、浮点型)的两个变量,当存储大范围数据的变量需要赋值给存储小范围数据的变量时,需要把大范围的数据强制转换成小范围的数据,然后再把强制转换得到的数据赋值给存储小范围数据的变量,我们把这一赋值过程叫做向下转型(强制类型转换),同时需要注意的是这个过程不是自动的,需要人为去执行操作。
理解:以一瓶售价2.0元的空瓶子和一个满的烧水壶为例,当你把满的烧水壶里面的水倒入到空瓶子时,发现空瓶子不够装,倒到后面发现水溢出了一部分,这个时候表明满的烧水壶在倒水过程中存在一些损失,因此把满的烧水壶里面的水倒入到空瓶是不合理的。同理,一个变量存储大范围的数据,把其赋值给一个定义了更小范围的变量,发现这个更小范围的变量是装不下的,此时还是要赋值的话,可以进行强制操作即把大范围的数据强制转换成小范围的数据,此时会损失一部分数据,而java是不允许直接丢失数据的,因此需要在强制类型转换的时候加上你要转换的那个小范围的数据类型,这样一来,存储小范围的数据的变量也能被赋值成功了
使用的场景: 当你使用Math.sqrt(计算的数据)这个函数进行素数的判断中的循环判断条件时,因为Math.sqrt(计算的数据)的返回值是double类型的数据,而进行循环计次的变量i是整型,整型与浮点型数据进行比较会多比较一次(临界),而且这个过程中还会把整型数据自动转换成浮点型数据,才能进行比较操作,因此这个时候就需要把Math.sqrt(计算的数据)强制转换成int类型的数据,这样循环的整个过程就会顺利执行了,不用再去执行额外的类型转换操作了。
核心:大类型数据的变量名赋值给小类型的变量名时,赋值运算符后面必须加上"(小类型对应的数据类型)"
语法如下:
把小范围变量名设为m,大范围变量名设为n,大范围、小范围指的是数据类型取值范围
n对应的数据类型 n=变量值;
m对应的数据类型 m=(m对应的数据类型)n;
例如:要把int类型的数据向下转型成byte类型的数据时,可以进行如下操作
int number01=5;
byte number02=(byte)number01;
//此时int类型的数据5就向下转型(强制类型转换)成了byte类型的数据,
//并把其赋值给了定义为byte类型的变量number02,此操作实现了向下转型(强制类型转换)