你的位置:首页 > Java教程

[Java教程]前言 java中精度损失问题 +=语句强制转换性

1、初入园,初写博

  大约一个月前,我获得了在海南电信规划设计院实习的机会,作为通信学子,能进设计院实习实属一个很好的机会,可是在我进入设计院实习两周左右的时间之后,我发现了设计院的工作基本上就是简单枯燥的机械工作。实习期间无非就是拿着前辈的规划设计图做出相应的设计规划书,设计规划书有个现成的模板,我们实习的工作就是根据设计图把模板进行相应的修改,修改完成之后则算完成了一份设计规划书。工作性质简单乏味不只是实习如此,我还对我在通信行业的规划有了相应的展望,实习结束之后,即使我成为了一个优秀的电信规划设计师,这样也不过只是依照电信规划原则而进行设备摆放的一个规划设计师。在我看来整个通信行业基本没有什么创新可言(参与通信领域新技术的研发除外),没有创新亦没有挑战,简单无聊的机械工作实在是不适合年轻人,所以我选择了辞职,放弃了稳定的国企工作,放弃了这样一个混吃等死的工作。

  在辞职之后,我想开始自己的程序员生涯,毕竟我个人对于编程还是很有好感的,在我看来这是一个充满挑战的职业。上周,我接到一个中通服旗下的软件公司的电话面试,面试之后我知道自己作为非软件工程专业的学子在软件开发方面还是存在很多不足,于是我重新开始了软件开发的基础学习,另外,我也在昨天申请了博客,在此记录下我当下的学习感悟以及日后参加工作遇到的问题及处理办法。

 

2、java中数据类型精度损失问题

  在网上找了毕向东老师的java教学视频开始了自学之路,在前两天的自学过程中有两点内容我认为应该着重注意下,写在此处,给未来的我和路过的朋友一点小小的帮助。

  关于java中数据类型范围值溢出报错:

 1 class Demo2 2 { 3   public static void main(String[] args)  4   { 5     byte a,b,c; 6     /*将int型赋值给byte型,byte型长度为一个字节,数值范围-128~127*/ 7     a=5; 8     b=128;//将超出数据类型数值范围的数赋给该类型会报错 9     c=a+b;//将未知大小的数值赋给byte型会报错10     System.out.println(c);11 12     int x,y,z;13     /*int型是java默认的整数类型,其长度为四个字节,数值范围-2147483648~2147483647*/14     x=154;15     y=Integer.MAX_VALUE+1;//给y赋值int最大值加1超出范围,溢出但是不报错16     z=x+y;//将未知大小的数值赋给int型不会报错17     System.out.println(z);18   }19 }

  运行结果:

  int型不报错,运行结果为-2147483494(错误结果)

  程序代码分析:

  byte型:1)在给其赋值超出范围的数值会报错精度损失(数据溢出)

      2)用未知大小的数(即变量)给其赋值时会报错精度损失(数据溢出)

  int型: 1)在给其赋值超出范围的数值不会报错精度损失(数据溢出)

       2)用未知大小的数(即变量)给其赋值时不会报错精度损失(数据溢出)

  总结:

  在编程中,不同类型的数据在赋值的时候可以使用强制转换来实现赋值,但是其中可能会出现精度损失,此类问题引起的bug不易发现,编程时需注意,尤其是int型数据,作为java默认数据类型,编译器在编译过程中不会对此进行报错,出现的精度损失bug很难发现,尤为要引起注意。

 

3、java中 += 和 = ( + ) 的区别

  在java中有+=这一运算符,初学者可能认为+=与 = ( + ) 是等价的,其实不是这样的。

 1 class Demo2 2 { 3   public static void main(String[] args)  4   { 5     byte a; 6     a=5; 7     a+=2;//顺利通过编译,没有报错 8     System.out.println(a); 9 10     byte b;11     b=5;12     b=b+2;//不能通过编译,报错提示精度损失13     System.out.println(b);14     15   }16 }

  运行结果:

  程序代码分析:

  +=语句将右侧结果进行了强制类型转换,之后在赋给左边。

  = ( + )语句并没有强制类型转换,所以编译时报错精度损失。

  总结:

  +=语句等价于=(强制类型转换)( + )语句。

  因为存在强制类型转换,所以要注意精度损失问题。