0

次のコードと出力があります。

public static void main(String[] args) {
    long lon = 1000;
    lon = lon * 3600;
    lon = lon * 24;
    lon = lon * 365;

    System.out.println("lon:  " + lon);

    long lon2 = 1000 * 3600 * 24 * 365;
    System.out.println("lon2: " + lon2);
}
lon:  31536000000
lon2: 1471228928

で何らかのオーバーフローが発生しているとlon2思いますが、それを理解できないようです。結果は Long.MAX_VALUE をはるかに下回っています。何か案が?

4

1 に答える 1

4

Java は、ここでの意図を推測できるほど賢くありません。

あなたの問題は、オーバーフローが発生した場所でintsを乗算していることです。その計算のすべての数値は であるintため、その結果もintです。割り当て時に結果intは に変換されlongますが、それまでには手遅れです。

したがって、次のようなものを使用します

long lon2 = 1000L * 3600 * 24 * 365;

計算全体がlongs で行われることを確認します。または、安全のために、Lすべてのリテラルに を付けてください。あなたの意図を非常に明確にします:-)

于 2013-04-25T11:46:50.710 に答える