源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java基础之隐式转换vs强制转换

  • 时间:2020-02-15 15:43 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java基础之隐式转换vs强制转换
Java中,经常可以遇到类型转换的场景,从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等,随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。 在定义变量时,有许多要注意的问题,一不小心就会出现损失精度或者不兼容类型等问题。 例如:     1.定义长整型数据时,必须加后缀l或L               long l =123456789012345L     2.定义单精度类型时(7-8位有效数字),必须加后缀 f 或 F               float f = 12.5F           3. boolean类型不可以转换为其它的数据类型。 这其中,我们常常会遇到数据类型的转换问题,最为常见的要属隐式转换和强制转换了,我们来分析一下。 [b]隐式转换[/b] [b]特征:[/b] 从小到大,可以隐式转换,数据类型将自动提升。 byte,short,char -->int  -->long -->float -->double 注意:long是8个字节,float是4个字节。 long是整数,float是浮点型,整数和浮点数的存储规则不一样,记住一点long的范围是小于float的。 例 : byte a=10; int b=a; 当编译intb=a 时,  a隐式转换为int类型。 [b]强制转换[/b] [b]特征:[/b]      从大到小(如果你明确知道数据是可以用该数据类型来表示的,可以用强制转换) [b]格式:[/b]     (转换后的数据类型)变量或者值。 注:一般情况下,根本不推荐使用强制类型转换。            例1 :
int a=10;
byte b=(byte)a;
当编译 byte b=(byte)a时, a被强制转换为byte类型。 例2:
class QiangZhiDemo 
{ 
  public static void main(String[] args) 
  { 
    byte b=(byte)130; 
    System.out.println(b); //打印结果-126 
  }   
} 
[b]解析:[/b] 数据130默认的是int类型的十进制数据, 第一步:十进制130转换成二进制数据。   10000010 第二步:130在内存中的表示形式如下 原码:0000000000000000 00000000 10000010 第三步:求int130的补码 因为130是正数,所以,反码和补码都和原码一致。 补码:0000000000000000 00000000 10000010 第四步:对补码进行截取,只剩下最后8位。 (byte)130 的补码为:10000010 第五步:把该补码转化为原码。 由于符号位(第一位)是1,故该数为负数, 反码:10000001     (补码-1) 原码:11111110     (符号位不变,数据位取反) 转化为十进制为 -126,所以最终打印-126。      例3 :
shorts = 1;
s= s +1;   
shorts = 1;
s+=1;   
有问题吗?为什么呢?      解析: 第一程序会报错:错误:不兼容的类型:从int转换到short可能会有损失      原因:s=s+1;s+1会隐式转换为int类型,当把一个int类型赋值给short类型是,可能会损失。 第二个程序可以编译运行。     原因:s+=1,虽然可以看做s=s+1,但是还是有区别的,s+=1中有一个强制转换,即s=(short)(s+1),会把s+1的值强制转换为short类型,故不会报错。 [b]小结:[/b] 数据类型转换的问题如果发生在一些小程序上,我们或许能够一眼看出,可是当编写一个庞大的系统时,拥有庞大数据量时,这些小小的问题可能导致系统出错甚至崩溃,所以前期代码编写的严谨性就得靠我们自己把握了。 以上内容给大家介绍了Java基础之隐式转换vs强制转换,希望大家喜欢。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部