System.outse declara como public static final PrintStream out.
Pero puedes llamar System.setOut()para reasignarlo.
¿Eh? ¿Cómo es esto posible si lo es final?
(el mismo punto se aplica a System.iny System.err)
Y lo que es más importante, si puede mutar los campos finales estáticos públicos, ¿qué significa esto en cuanto a las garantías (si las hay) que finalle brinda? (Nunca me di cuenta ni esperaba que System.in/out/err se comportara como finalvariables)