Verwirrende Ausgabe einer unendlichen Rekursion innerhalb von try-catch

Betrachten Sie den folgenden Code.

public class Action {
private static int i=1;
public static void main(String[] args) {
    try{
        System.out.println(i);
        i++;
        main(args);
    }catch (StackOverflowError e){
        System.out.println(i);
        i++;
        main(args);
    }
 }

}

Ich bekomme einen Wert bis zu4338 korrekt. Nach dem Fang derStackOverflowError Ausgang wird wie folgt verdrahtet.

4336
4337
4338 // up to this point out put can understand 
433943394339 // 4339 repeating thrice  
434043404340
4341
434243424342
434343434343
4344
4345
434643464346
434743474347
4348
434943494349
435043504350

ErwägenLeben Demo hier. Es funktioniert bis zui=4330. Wie passiert das eigentlich?

Zu Ihrer Information:

Ich habe folgenden Code verwendet, um zu erkennen, was hier passiert.

public class Action {

    private static int i = 1;
    private static BufferedWriter bw;

    static {
        try {
            bw = new BufferedWriter(new FileWriter("D:\\sample.txt"));
        } catch (IOException e) {
           e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        bw.append(String.valueOf(i)+" ");
        try {
            i++;
            main(args);
        } catch (StackOverflowError e) {
            bw.append(String.valueOf(i)+" ");
            i++;
            main(args);
        }
    }

}

Jetzt vorherige Ausgabe nicht da. jetzt Wert voni bis zu16824744 richtig und und läuft weiter. Ich hoffe, dass dies bis zum Wert von läufti=2,147,483,647(max value of int) ohne ein Problem.

Es gibt ein Problem mitprintln(). Es gibt ähnliche Antworten auch unten. Aber warum?

Was wird der eigentliche Grund sein?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage