Java中数值类型之间的转换


转载来源:http://blog.csdn.net/goskalrie/article/details/50698004


Java中数值类型之间的转换方式有两种:一是自动转换,另一种是强制类型转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。

1、自动数据类型转换

下表中给出了数值类型之间的合法转换

在上图中有6个细线建投,表示无信息丢失的转换;有三个粗线箭头,表示可能有精度损失的转换。例如,123456789是一个大整数,它所包含的位数比float类型所能够表达的位数多。当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度。

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
    低--------------------------------------------->高
    byte,short,char-> int -> long -> float -> double

int n = 123456789;

float f = n;//f值为1.234567892E8

当使用上面两个数值进行二元操作时(例如 n+f  , n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。

如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型;

否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型;

否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。

否则,两个操作数都将被转换为int类型。

2.强制类型转换

强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确。例如:

double dx = 9.99;

int  ix = (int)dx;

这样,变量ix的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。

如果想对浮点值进行舍入运算,以便得到最接近的整数(在很多情况下,希望使用这种操作方式),那就需要用Math.round方法:

double dx = 9.99;

int ix = (int)Math.round(10);

现在,变量ix的值为10.当调用round方法的时候,仍然需要使用强制类型转换。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。

警告:如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。例如:

[java]  view plain  copy
  1. System.out.println((byte)300);  
  2. System.out.println((byte)200);  
  3. 输出结果为:  
  4. 44  
  5. -56  
不要在boolean类型与任何类型之间进行强制类型转换,这样可以防止发生错误。


转载来源:http://blog.csdn.net/goskalrie/article/details/50698004
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值