博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提高你的Java代码质量吧:不要让类型默默转换
阅读量:4673 次
发布时间:2019-06-09

本文共 1124 字,大约阅读时间需要 3 分钟。

一、分析 

在Java运算中的类型转换,是先运算在进行类型转换的具体场景如下

二、场景 

在如下程序中 

 

public class Client{     public static final int LIGHT_SPEED = 30 * 10000 * 1000;     public static void main(String[] args){         System.out.println("月亮照射到地球需要1秒,计算月亮到地球的距离。");         long dis1 = LIGHT_SPEED * 1;         System.out.println("月亮与地球的距离是:" + dis1 + "米");         System.out.println("----------------------------------------------------");         System.out.println("太阳照射到地球上需要8分钟,计算太阳到地球的距离。");         //可能超出整数范围,使用long型         long dis2 = LIGHT_SPEED * 60 * 8;         System.out.println("太阳与地球的距离是:" + dis2 + "米");     } }

 

运行结果是 

月亮照射到地球需要1秒,计算月亮到地球的距离。 

月亮与地球的距离是:300000000米 

---------------------------------------------------- 

太阳照射到地球上需要8分钟,计算太阳到地球的距离 

太阳与地球的距离是:-2028888064米 

太阳和地球的距离竟然是负的!那是因为Java是运算然后再进行类型的转换,具体地说是因为dis2的三个运算参数都是int类型,三者相乘的结果虽然也是int类型,但是已经超过了int的最大值,所以其值就是负值了,在转换成long型,结果是负值。 

解决办法,只要加个L即可,如下 

long dis2 = LIGHT_SPEED * 60 L * 8; 

60L是long型,乘出来的结果也是long型,在还没有超过int类型的范围时就已经转换成long型了。 

三、建议 

在实际开发中,基本类型的转换时,通用的做法是主动声明式类型转换(注意不是强制类型转换)。代码如下 

long dis2 = 1L * LIGHT_SPEED * 60 * 8; 

 

转载于:https://www.cnblogs.com/jiangu66/p/3196618.html

你可能感兴趣的文章
字符流Reader和Writer
查看>>
【校招面试 之 C/C++】第33题 C++ 11新特性(四)之STL容器
查看>>
Java替代C语言的可能性
查看>>
android ListView中CheckBox错位的解决
查看>>
linux下的mongodb数据库原生操作
查看>>
BNUOJ 1268 PIGS
查看>>
菜鸟的MySQL学习笔记(三)
查看>>
商业选址5A法则
查看>>
POJ 1191 棋盘分割(区间DP)题解
查看>>
文件同步服务器,iis 集群 ,代码同步(一)
查看>>
JS之模板技术(aui / artTemplate)
查看>>
【Tomcat】Tomcat Connector的三种运行模式【bio、nio、apr】
查看>>
Mysql-2-数据库基础
查看>>
python把源代码打包成.exe文件
查看>>
再也不用担心网吧开黑队友听不清了!降噪解决方案了解一下?
查看>>
PhotoshopCS5中将单位修改成百分比
查看>>
赵雅智:js知识点汇总
查看>>
变形二叉树中节点的最大距离(树的最长路径)——非递归解法
查看>>
cocos2d-x 3.0rc1 编译cpp-testsproject
查看>>
《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...
查看>>