gpt4 book ai didi

java隐式长转换行为

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:01 24 4
gpt4 key购买 nike

今天我发现我的一个程序有问题,因为隐式转换不起作用,最好说它没有像我预期的那样工作。

我有这样的东西

long normal = 1000*24*3600*1000;
System.out.println("normal :"+normal);

normal :500.654.080

向excel查询正确的计算结果应该是86.400.000.000;

我去了java manual long 数据类型的最大值应为 2^63-1,即:9.223.372.036.854.780.000

然后我试着强制类型转换变长,它似乎奏效了:

    long normal = 1000*24*3600*1000;
long explicit = 1000*24*3600*1000l; // 1000l <- letter L used at the end for long
long cast = 1000*(long)(24*3600*1000);

System.out.println("normal :"+normal);
System.out.println("explicit :"+explicit );
System.out.println("cast :"+cast);

normal :500.654.080

explicit :86.400.000.000

cast :86.400.000.000

我认为正在发生的事情是,java 在 integer overflow 的一个点将计算作为整数 an发生了。

Java 不应该将这些整数隐式转换为长整数吗?

最佳答案

在 Java 中,当使用整数 进行计算时,无论您用来分配结果的变量类型如何,结果总是整数

将一个(或所有)数字文字分配为 Long 是一种可行的方法,因为您自己已经发现:

long implicit = 1000L*24*3600*1000;

编辑:如评论中所述,Java 中的操作数是从左到右求值的,因此至少左侧的第一个操作数应指定为 Long

关于java隐式长转换行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com