Java第三课

文章介绍了Java中数据类型之间的转换,包括隐式转换和强制转换的规则。隐式转换发生在小数据类型与大数据类型运算时,而强制转换可能造成精度丢失或溢出。此外,文章还提到了编译器对常量表达式的优化,以及在转换过程中需要注意的数据范围和精度问题。
摘要由CSDN通过智能技术生成

引入:Java第二课我们已经学了数据类型的分类,那么数据类型之间怎么转换的。

一、类型转换

1.隐式转换

1.1 是什么:小的数据类型与大的数据类型进行运算,小的数据类型会自动提升为大的数据类型再进行运算。

代码:

i 第七行使用int类型接收a与b的运算结果,报错

ii 第八行使用double类型可以接收a与b的运算结果,无报错

iii 第九行输出结果为double类型

总结:double数据类型比int数据类型大

问题:判断数据类型的大小的标准是什么?此文章后面解答

1.2 转换规则:数据类型从小到大的顺序:byte、short、char->int->long->float->double

注意:byte、short和char型的值在表达式中参与运算时,都会自动转换成int型。

1.3 判断数据类型的大小的标准:

在计算机中,数据类型的大小通常与它们在内存中占用的存储空间有关。从存储范围方面考虑,常见数据类型在内存中占用的空间从小到大的顺序如下:

byte:1字节

char:2字节

short:2字节

int: 4字节

float:4字节

long:8字节

double:8字节

因此,就存储范围而言,同样也有一种从小到大排序的规则:

byte < char < short < int < float < long < double

需要注意的是,这里的存储范围只是指各自在内存中占用的空间范围,并不直接体现其实际存储的数值范围。例如,虽然byte类型在内存中只占用1个字节的空间,但是它的实际取值范围是-128到127,与char类型的2字节内存空间和0到65535的取值范围相比较,byte类型有限制更大的问题。因此,在选择数据类型时,需要同时考虑存储范围和实际取值范围,并根据需要选择更加合适的数据类型。

2. 强制转换

2.1 是什么:

将一个较大的数据类型转换为较小的类型,或者将一个不兼容的数据类型转换为另一个类型。强制转换的格式为:

数据类型 变量名=(type)value

其中,type表示要转换的目标数据类型,value为要转换的值。

需要注意的是,如果要进行强制类型转换时,需要考虑数据类型的兼容性。如果转换的目标类型比原类型大,那么通常可以进行隐式转换,不需要进行强制转换。如果数据类型不兼容,则会出现转换错误或数据精度丢失的问题,因此需要谨慎使用强制转换。例如,将float类型的值转换为int类型时,会出现精度丢失的问题,因此需要特别注意。

代码:

int i1 = 123;
double d1 = 45.67;

//将int类型的变量i1强制转换为double类型,结果为123.0
double d2 = (double)i1;

//将double类型的变量d1强制转换为int类型,结果为45
int i2 = (int)d1;

需要注意的是,在进行强制类型转换时也可能会出现类型溢出和非法转换的问题。因此,在使用强制类型转换时一定要谨慎考虑。

二、特殊的案例

代码:

i. 第七行进行运算会报错

原因:byte类型在运算中会自动转换为int类型,int类型无法被byte类型接收。

解决:

第一种方式:运算结果强转为byte类型,代码:byte c=(byte)(a+b);

第二种方式:使用int类型,代码:int c=a+b;

ii.第八行不会报错,why?3和4不是int类型吗?

原因:

编译器会对代码进行常量优化,即将表达式中的常量进行计算后直接替换成结果,以减少程序运行时间和空间的浪费。在byte d=3+4的语句中,编译器会在编译时将3+4这个常量表达式自动求值,结果为7,将其优化为 byte d = 7;。由于7可以用byte类型存储-在byte的存储范围内,因此编译器不会报错。

需要注意的是:

第一、常量优化机制虽然可以提高程序的执行效率,但是也会占用一定的内存空间,因此在实际开发中需要谨慎使用,避免出现过多的常量导致内存占用过大的问题。同时,在进行类型转换时也需要注意数据类型精度的问题。

第二、如果表达式的结果超过了byte类型的取值范围,就会发生数据溢出或精度丢失等问题,因此需要谨慎处理数据类型的强制转换。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值