Java_语法基础_不要让类型默默转换
来源:互联网 发布:卖家如何联系淘宝小二 编辑:程序博客网 时间:2024/05/29 16:27
例:
package deep;public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 10000 * 1000; public static void main(String[] args) { System.out.println("题目1:月亮光照射到地球需要1秒,计算月亮和地球的距离。"); long dis1 = LIGHT_SPEED * 1; System.out.println("月亮与地球的距离是:" + dis1 + "米"); System.out.println("---------------------------------------"); System.out.println("题目2:太阳光照射到地球上需要8分钟,计算太阳到地球的距离。"); long dis2 = LIGHT_SPEED * 60 * 8; System.out.println("太阳到地球的距离是:" + dis2 + "米"); }}
运行结果:
题目1:月亮光照射到地球需要1秒,计算月亮和地球的距离。
月亮与地球的距离是:300000000米
—————————————
题目2:太阳光照射到地球上需要8分钟,计算太阳到地球的距离。
太阳到地球的距离是:-2028888064米
为什么太阳到地球的距离是负的?那是因为Java是先运算然后再进行类型转换的,具体地说就是因为dis2的三个运算参数都是int类型,三者相乘的结果虽然也是int类型,但是已经超过了int的最大值,所以其值就是负值了,再转换成long型,结果还是负值。
问题知道了,解决起来也很简单,只要加个小小的“L”即可,代码如下:
long dis2 = LIGHT_SPEED * 60L * 8;
60L是一个长整型,乘出来的结果也是长整型(此乃Java的基本转换规则,向数据范围大的方向转换,也就是加宽类型),在还没有超过int类型的范围时就已经转换为long型了,彻底解决了越界问题。在实际开发中,更通用的做法是主动声明式类型转化(注意不是强制类型转换),代码如下:
long dis2 = 1L * LIGHT_SPEED * 60 * 8;
既然期望的结果是long型,那就让第一个参与运算的参数也是long型(1L)吧,也就是明说:“嗨,我已经是长整型了,你们都跟着我一起转为长整型吧”。
0 0
- Java_语法基础_不要让类型默默转换
- 不要让类型默默转换
- Java_语法基础_不要让四舍五入亏了一方
- 2.23 不要让类型默默转换
- Java_语法基础_不要随便设置随机种子
- Java_语法基础_提防包装类型的null值
- Java_语法基础_谨慎包装类型的大小比较
- Java_语法基础_优先选择基本类型
- Java_语法基础_字符串与数字之间的转换
- Java_语法基础_十进制转换为其它进制
- Java_语法基础_将字符串转换为Boolean对象
- Java_语法基础_整型之间的转换
- 提高你的Java代码质量吧:不要让类型默默转换
- Java_语法基础_移位运算符
- Java_语法基础_标识符定义规则
- Java_语法基础_“$”惹的祸
- Java_语法基础_字节数组转换为16进制字符串
- Java_语法基础_基本数值与包装对象的转换
- ubuntu 网络 设备未托管
- android数据库的升级
- maven+jetty工程开启Debug调试
- 11g OS文件移动到ASM
- HDOJ 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 2191
- Java_语法基础_不要让类型默默转换
- 第23章 MYSQL结构
- 基于人工分析的HTTP-POST请求报文特征获取一般方法
- LeetCode Valid Sudoku
- pipe管道
- zoj 2949 Coins of Luck 抛硬币(概率(期望)+dp)
- 嵌入式开发第一课(嵌入式开发整体流程及开发环境的搭建)
- PAT BASIC PRACTISE: 1001. 害死人不偿命的(3n+1)猜想
- mybatis中的#和$的区别