次のような非常に単純な Java コードは奇妙な出力を示しますが、C と C++ の同じロジック コードは正しい出力を示します。JDK 1.7 と JDK 1.3 (相対 JRE) を試してみましたが、常に奇妙な出力が表示されます。
public class Test {
public static int sum=0;
public static int fun(int n) {
if (n == 1)
return 1;
else
sum += fun(n - 1); // this statement leads to weird output
// { // the following block has right output
// int tmp = fun(n - 1);
// sum += tmp;
// }
return sum;
}
public static void main(String[] arg) {
System.out.print(fun(5));
}
}
出力は 1 ですが、8 になるはずです。相対的な C/C++ コードは次のとおりです。
#include<stdio.h>
int sum=0;
int fun(int n) {
if (n == 1)
return 1;
else
sum += fun(n - 1);
return sum;
}
int main()
{
printf("%d",fun(5));
return 0;
}
テスト Java コードの追加:
class A {
public int sum = 0;
public int fun(int n) {
if(n == 1) {
return 1;
} else {
sum += fun(n - 1);
return sum;
}
}
}
public class Test {
public static void main(String arg[]){
A a = new A();
System.out.print(a.fun(5));
}
}