Java各种数据类型转换详解

本文深入探讨了Java中自动类型转换和强制类型转换的原理及应用。详细解释了基本数据类型在不同场景下的转换规则,包括变量赋值、方法调用、一元和二元运算符的使用。并通过实例演示了如何在工程实践中实现这些转换。

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

自动类型转换

Java的八种基本数据类型可以混合使用。在操作过程中,不同类型的数据会先自动转换为同一类型,然后再进行操作。数据类型可以根据所占存储空间的大小分为高、低两种级别。占用空间越小,层越低,占用空间越大,层越高。自动类型转换遵循从低级到高级转换的规则。如图3.9所示。从左到右的数据类型正在增加,箭头指示自动类型转换的规则。

 

图1数据类型级别和自动转换规则

基本数据类型的自动类型转换在以下情况下发生:

l变量分配

当分配给变量的数据类型与变量类型不一致,并且分配的数据类型的级别低于变量类型的级别时,自动数据类型转换会自动将分配的数据转换为变量的类型。

例如:

L方法调用

向方法的参数传递一个值,该值的数据类型低于该方法的参数变量的数据类型。

例如:

公共静态void say(int num){

系统。出来。println(“这是一个int值:”+num);

}

publicstatic void main(字符串参数){

字节byteum=23;

say(bytenum);//将字节值传递给方法的int参数

}

一元运算

在一元运算中(除+和-运算符外),如果操作数的类型低于int(即byte、short和char),则操作数将自动转换为int。

L二元运算符

在二进制操作中,所有低级数据类型都转换为操作中的最高级别数据类型。也就是说,如果一个操作数是double类型,其他操作数将自动转换为double类型。如果操作中的最高数据类型是float,则其他操作数将转换为float类型。如果最高的数据类型是long,则所有操作数都将自动转换为long。如果最高数据类型为int,则所有操作数都将自动转换为int。对于byte、short、char类型,它们将自动转换为int或操作中的最高数据类型。

在工程实例中创建一个转换类,在主方法中创建不同的数值变量,实现变量的自动类型转换。

q

BYTEB1=34;

缺点1=123;

CHARC1=“B”;

iTI1=40;

LYL1= 900L;

floatf1=8.11f;

加倍1=3.1415926;

系统。出来。println(“双/字节+字符->;双T”+(d1/b1+c1));

系统。出来。println(“长+短->;长T”+(l1+s1));

系统。出来。println(“char+byte+short->;int t”+(c1+b1+s1));

系统。出来。println(“float+b1/s1->;float t”+(f1+b1/s1));

系统。出来。println(“int+double->;double t”+(i1+d1));

}

}

操作结果如图2所示。

http://image1.hipu.com/image.php?url=0LIiUGGalI

图2。示例执行结果

强制类型转换

在将高级数据类型(即占用较大的存储空间)分配给低级数据类型(即占用较小的存储空间)时,必须执行强制类型转换。其语法格式如下:

(类型)(表达式)

类型是要转换的目标类型,如int、short、double等。表达式是要转换的目标数据,可以是任何基本类型的算术表达式。

例如:

短snum=(short)num;//900

长类型900的值不超过短类型的值范围,因此短类型变量“snum”完全适应强制类型转换后的值。

基本数据类型的强制类型转换需要注意数据完整性。当低级数据类型必须使用高级数据类型时,如果该值超过低级数据类型的值范围,则会截取该值,从而导致数据丢失和不完整。

例如:

短snum=516;//516

bytebnum=(byte)snum;//4

snum是短类型,数据长度为16位,bnum是字节类型,长度为8位。当snum被强制转换为字节类型时,值“516”超过字节类型值的范围。这是一个bnum变量,只能通过截取低至8的短类型的数据来分配给字节类型。如图1所示。

http://image1.hipu.com/image.php?url=0LIiUGHvbu

图1。将short转换为byte时必须截取数据

这会导致数据丢失,因此在使用强制数据类型转换时要小心。

示例将长类型数字强制类型转换为其他数据类型

公共类conversion{

公共静态void main(字符串参数){

长数=33333;

system.out.println(“原始编号为:”+num);

系统。出来。println(“to int:”+(int)num);

转换为短:“+(短)num”;

转换为字节:“+(byte)num”;

转换为float:“+(float)num”;

转换为char:“+(char)num”;

}

}

示例的运行结果如图2所示。

http://image1.hipu.com/image.php?url=0LIiUG8MaL

图2运行结果示例

自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。 转换规则 从存储范围小的类型到存储范围大的类型。 具体规则为: byte→short(char)→int→long→float→double 也就是说byte类型的变量可以自动转换为short类型,示例代码: byte b = 10; short sh = b; 这里在赋值时,JVM首先将b的值转换为short类型,然后再赋值给sh。 在类型转换时可以跳跃。示例代码: byte b1 = 100; int n = b1; l 注意问题 在整数之间进行类型转换时,数值不发生改变,而,特将整数类型别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。 强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换转换规则 从存储范围大的类型到存储范围小的类型。 具体规则为: double→float→long→int→short(char)→byte 语法格式为: (转换到的类型)需要转换的值 示例代码: double d = 3.10; int n = (int)d; 这里将double类型的变量d强制转换成int类型,然后赋值给变量n。需要说明的是小数强制转换为整数,采用的是“去1法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是3。整数强制转换为整数时取数字的低位,例如int类型的变量转换为byte类型时,则只去int类型的低8位(也就是最后一个字节)的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值