小小程序题,关于final long 类型的变量

小米吃辣椒2022
博客专家认证
2017-03-23 04:42:55
public class Question2 extends Exception{
public static void main(String[] args) {
final long MICROS_PER_DAY=24*60*60*1000*1000;
final long MILLIS_PER_DAY=24*60*60*1000;
System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);

}
}
理论上来说,应该得到的结果是1000,为什么控制台上面输出的却是5??,大神门,有谁知道呢?
...全文
429 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱写Bug的麦洛 2017-03-25
  • 打赏
  • 举报
回复
搞不懂,楼主解决了,麻烦告知下思路
MikeDDT009 2017-03-25
  • 打赏
  • 举报
回复
的确楼上所说对的,我再添加一点吧,免得你感觉会蛋疼, java里默认整数都是int型,如果要使用long型,那么你就需要在后面加上l(不区分大小写) 下面分析这段语句的意思: 复杂版: final long  MICROS_PER_DAY=24*60*60*1000*1000; 前面的final这我觉的你目前也行不需要太过只知道,只需要知道加上这样玩意,这个变量(或说变量常量?)在整个程序运行中第一次赋值以后不可以再次赋值。 long 声明的数据类型类型  MICROS_PER_DAY 变量名 = 赋值符号 24*60*60*1000*1000 这是一个表达式,那么表达式的结果呢?由于都是int型,那么结果也必然是int型,而计算结果是超出int型的取值范围(int型的取值范围是:2147483647 ~ -2147483648),那么就是把超出数据类型的值放进去小地方,那么就会有数据丢失,所以得到的值不会准确的按照你表达式里的数学逻辑来看。 最后再将得到的int数据类型的值赋值给 MICROS_PER_DAY 简单版: 总结不来。。。。。 涉及知识点: 运算符的优先级 额外说明:小数默认的话是double类型 特别提示:数据之间的混合运算的结果——只作为需要关注点吧
幽饮烛 2017-03-25
  • 打赏
  • 举报
回复
final long MICROS_PER_DAY=24L*60L*60L*1000L*1000L; final long MILLIS_PER_DAY=24L*60L*60L*1000L; 默认的数字都是 int 类型。加上 L(大小写都行)的意思是这个数字是 long。
汉江小水蛇 2017-03-25
  • 打赏
  • 举报
回复
24*60*60*1000*1000结果超过了long的存储范围。所以得到的结果不准确。
李德胜1995 2017-03-23
  • 打赏
  • 举报
回复
声明long常量时在后面加上l就可以了。。。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧