基本数据类型的转化(自动转化以及强制转化)

本文详细介绍了Java中数据类型的自动转换与强制转换过程,并通过具体的示例解释了基本数据类型在变量运算和常量运算中的行为特点。

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

自动转化:自动转化又称为隐式转化,就是数据范围小的数据类型自动会被JVM转化为数据范围大的数据类型;例:杯子里面的水可以装在桶里面
强制转化:就是数据范围大的被存储到数据范围小的数据类型中;例:桶里面的水 不能直接被装在杯子里面,如果是想把桶里面的水装到瓶子里,前提是桶里面的水刚好可以装到瓶子里面,如果是桶里面的水比瓶子容量大的话,则会发生溢出,此处就像数据范围大的数据类型的数据装到数据类型小的中,则会损失精度,该精度损失要取决于开发中是否能被忽略。


1. 基本数据类型转化图

char —————>|
=============|——–>int—–>long—->float—–>double
byte、short ——>|

2. 基本数据类型的<变量>运算

    byte b1 = 1;
    byte b2 = 2;

    short s1 = 1;
    short s2 = 2;

    char c1 = 1;
    char c2 = 2;

    //以下运算报错:int转化为byte会有损失  因为byte进行数据运算的时候JVM会自动将数据类型提升为int类型
    //则等号右边的运算结果为int类型,而等号左边的接受类型为byte  所以数据范围大的转化为数据范围小的会有
    //数据丢失,即溢出

    // byte b3 = b1 + b2;//错误: 不兼容的类型: 从int转换到byte可能会有损失 所以在进行数据处理上要让程序员进行来取决其数据损失可以被忽略与否即进行强制转化
    // short s3 = s1 + s2;//错误: 不兼容的类型: 从int转换到short可能会有损失
    // char c3 = c1 + c2;//错误: 不兼容的类型: 从int转换到char可能会有损失
    // char c4 = b1 + s2;// 错误: 不兼容的类型: 从int转换到char可能会有损失
    /*
        等号右半边的数据类型无论是byte、short、char的一种以及混合运算其运算都会被提升为int类型
    */
    //byte b6 = b1 + 1;//错误: 不兼容的类型: 从int转换到short可能会有损失
    // short s4 = b1 + c2;//错误: 不兼容的类型: 从int转换到short可能会有损失
    long l1 = 1;
    long l2 = 2;

    float f1 = 1;
    float f2 = 2;

    // long l3 = f1 + 1;//错误: 不兼容的类型: 从float转换到long可能会有损失

    //同时也要注意数据类型提升的时候,long类型会自行被提升为float类型
    float f3 = l1 + l2;

3. 基本数据类型<常量>运算

/*
    byte、short、char这三种常量运算JVM都会进行优化的,如果是超出其数据表示的范围的话,则会被自动转化为int类型
*/
    byte b4 = 1 + 3;//当进行常量运算的时候JVM会对其进行优化,前提是不能超过其数据范围-128~127,若超出其数据表示的范围则会报错,以下则是具体例子 
    // byte b5 = 1 + 127;//错误: 不兼容的类型: 从int转换到byte可能会有损失 
    short s5 = 1 + 4;//当进行常量运算的时候JVM会对其进行优化,前提是不能超过其数据范围-32768~32767,若超出其数据表示的范围则会报错,以下则是具体例子
    // short s6 = 1 + 32767;//错误: 不兼容的类型: 从int转换到short可能会有损失
    char c5 = 2 + 1;//当进行常量运算的时候JVM会对其进行优化,前提是不能超过其数据范围0~65535,若超出其数据表示的范围则会报错,以下则是具体例子
    // char c6 = 1 + 65535;////错误: 不兼容的类型: 从int转换到short可能会有损失 char类型相当于一个无符号整数,所以取值范围为0~65535

总结:

数据类型进行运算的时候首先要看赋值号(=)的右边的运算结果的类型,然后在进行看赋值号左边的数据类型
如果是类型相同的话,则可以赋值;
如果不同的话,如果是范围大的数据类型赋值给范围小的数据类型的话,则会报错,否则使用强制类型转化
如果是范围小的数据类型赋值给范围大的数据类型的话,则JVM进行自动转化的

特殊记:

byte、short、char这三种常量运算JVM都会进行优化为int类型进行运算的;
char类型使用两个字节保存该数据,但是其相当于是一个无符号整数取值范围是0~65535
long类型也会被自动转化为float类型的;
其他的数据类型进行运算的话,都遵循上面基本数据类型转化图即可

———————-刚写博客还希望大家批评指正相互学习————————————-

C语言中,强制数据类型转换是指将一种数据类型的值转换为另一种数据类型的值。这种转换可以通过在变量或表达式前面加上要转换的目标类型的名称来实现。 强制数据类型转换的目的是将某个数据类型的值转换为另一种数据类型,以便满足特定的需求或运算要求。在实际应用中,强制数据类型转换常常用于以下几个方面: 1. 提升精度:当进行某些运算时,如果操作数的数据类型不一致,可能会导致精度丢失或运算结果不准确。通过强制数据类型转换,可以将较低精度的数据类型转换为较高精度的数据类型,从而提升计算的准确性。 2. 缩小类型范围:有时候我们可能需要将一个较大范围的数据类型转换为一个较小范围的数据类型,以便满足特定的需求或优化内存空间的使用。通过强制数据类型转换,可以将较大范围的数据类型转换为较小范围的数据类型,从而减少内存占用。 3. 类型兼容性:在某些情况下,变量的数据类型需要与其他数据类型进行兼容,以便进行数据传递或数据交换。通过强制数据类型转换,可以将一个数据类型转换为另一个兼容的数据类型,实现数据的无缝传递和交换。 需要注意的是,在进行强制数据类型转换时,可能会导致数据的精度丢失或运算结果不准确,因此需要谨慎使用。另外,强制数据类型转换可能会改变变量的值,需要根据实际需求进行适当的处理和转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值