【发布时间】:2019-07-30 15:10:22
【问题描述】:
这是一个简单的问题示例:
public class IntVsLong {
public static void main(String[] args) {
int a = 3;
int b = 3;
long n = 549382313570L;
String s = "epsxyyflvrrrxzvnoenvpegvuonodjoxfwdmcvwctmekpsnamchznsoxaklzjgrqruyzavshfbmuhdwwmpbkwcuomqhiyvuztwvq";
System.out.println(a * n/s.length() + b); //returns 16481469410
System.out.println(a * (n/s.length()) + b); //returns 16481469408
}
}
第一种情况,不带括号,返回 16481469410。第二种情况,带括号,返回 16481469408。为什么?
【问题讨论】:
-
因为你改变了评估的顺序。
-
你好。我认为这是一道数学题……你的括号改变了计算顺序。
-
@takendarkk 据我所知,Java 遵循数学规则,如果我在除以 s.length() 之前将 a 与 n 相乘 VS 先将 n 与 s.length() 相除应该没有区别然后与 a 相乘。 b 在这两种情况下都是最后添加的。此外,这两个结果的差异只有 2,如果我先添加 b 而不是操作,差异会大得多。请重新阅读代码或更详细地解释。
标签: java int long-integer