Dlaczego tak
Kompilator javac tłumaczy kod źródłowy na kod bajtowy zapisany w plikach .class, niezależny od procesora i systemu. Wykonuje go maszyna wirtualna JVM, która interpretuje kod bajtowy i najczęściej używane fragmenty kompiluje w locie (JIT) do kodu maszynowego. Dlatego ten sam plik .class działa na Windows i Linux. Uruchomienie java Main.java tylko ukrywa etap kompilacji — wykonuje się go w pamięci, a nie pomija.