提高你的Java代码质量吧:不要让类型默默转换
一、分析
在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;
提高你的Java代码质量吧:不要让类型默默转换相关推荐
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
一.分析 字符串的操作,诸如追加.合并.替换.倒序.分隔等,都是在编码过程中经常用到的,而且Java也提供了append.replace.reverse.split等方法来完成这些操作,它们使用起来 ...
- 提高你的Java代码质量吧:少用静态导入
一.分析 从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序. 但是,滥用静态导入会使程序更难阅读,更难维护.静态导 ...
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
一.分析 Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便. 二.场景 比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生 ...
- 提高你的Java代码质量吧:使用valueof前必须进行校验
一.分析 每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode.name.valueOf等,其中valueOf方法会把一个String类型的名称转变成枚 ...
- 提高你的Java代码质量吧:不要随便设置随机种子
一.分析 在加密.混淆数据等地方,我们经常期望获得一个唯一的.不可仿造的数字,以避免产生相同的业务数据造成混乱. 在Java项目中,通常是通过Math.random方法和Random类类获得随机数的. ...
- 提高你的Java代码质量吧:让我们疑惑的字符串拼接方式的选择
一.分析 对于一个字符串进行拼接有三种方法:加号.concat方法.及StringBuiler或StringBuffer. 1."+"方法拼接字符串 str += " ...
- 提高 Java 代码质量
高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况.那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验.最佳 ...
- java 代码解析工具_改善 Java 代码质量的工具与方法
原标题:改善 Java 代码质量的工具与方法 我们可能见过上面的有关代码质量的图片,究竟如何衡量一段代码好坏? 代码质量是什么?为什么它很重要? 作家通过他的著作来讲述了一个清晰的.令人信服的故事.他 ...
- 从 FingBugs的错误来看JAVA代码质量
从 FingBugs的错误来看JAVA代码质量(一)http://scholers.iteye.com/blog/1107452 从 FingBugs的错误来看JAVA代码质量(二)http://sc ...
最新文章
- Python3 集合set
- Android开源框架——内存泄漏检测工具 LeakCanary
- Cocos2d-x3.1TestCpp之NewRenderTest Demo分析
- 1038. Jewels And Stones
- 32位数据源中没有mysql_基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器...
- 闭包和高阶函数-函数式编程的基本特征
- Fiddler4——手机抓包
- SmartSVN使用
- winRAR去广告版
- 一点点读懂cpufreq(一)
- php判断支付宝,使用PHP判断是否为微信、支付宝等移动设备访问代码
- Unity2D学习笔记Day12:敌人统一死亡动画+Class的继承(含虚函数virtual,重写override)
- k8s拉取镜像规则_【大强哥-k8s从入门到放弃13】Service详解
- 名帖347 怀素 草书《大草千字文》
- Blockly与Scratch3.0的比较分析
- iPython清屏命令
- 网络文件共享服务之NFS
- iQQ 学习笔记1 :登录、验证码、收消息
- DB2处理数据由原来六小时优化到二十分钟(一)
- 大数据之linux网络,主机名配置
热门文章
- Java开发微信公众号-接口测试帐号接口配置及Java源代码
- linux proftpd 用户,proftpd 虚拟帐号的建立及quota
- python相册排版_Python3一键排版证件照(1寸照、2寸照) | 原创
- Elasticsearch 中为什么选择倒排索引而不选择 B 树索引
- WeUI - 微信官方推出的免费开源 UI 组件库,上手简单,风格简约,在微信生态开发轻量项目的绝佳选择
- 超级计算机的性能指标
- Leaving fence domain… found dlm lockspace /sys/kernel/dlm/rgmanager
- (一) linux没有网络的解决办法
- Python+Selenium自动化测试之页码,前一页、后一页、翻页
- 直播延时是如何产生的?4G摄像头无插件播放视频流媒体服务器EasyDSS超低延时直播的实现方案