¿Cómo decide Java cuándo importar?

¿Por qué Java no necesita importar clases como Integer, String, etc. mientras necesita importar otras clases?

Hay una importación implícita de java.lang.* .

De la especificación de Java :

Una unidad de comstackción automáticamente tiene acceso a todos los tipos declarados en su paquete y también importa automáticamente todos los tipos públicos declarados en el paquete predefinido java.lang .

java.lang paquete java.lang se importa por defecto, no es necesario importarlo explícitamente.

No es necesario importar las clases en el paquete java.lang (el comstackdor actúa como si siempre se importasen). Este paquete incluye clases principales como String, Enum, Runnable, NullPointerException y, por supuesto, las clases primitivas como Integer y Double.

Porque, pertenecen al paquete java.lang.* . Y, es implícitamente importado por el comstackdor. Si lo haces, entonces no te va a quejar.

java.lang es in-build, implícitamente importado en java, no necesita ser importado manualmente

Como contiene clases muy frecuentemente utilizadas, han hecho que sea opcional importar solo para su conveniencia

cada clase en Java está en un paquete y si no se define ningún paquete, entonces se entiende como un paquete predeterminado. Y en la parte superior del paquete está java.lang. * Por lo que no es necesario importarlo para importar otras clases.

Las clases Integer, String, etc. están presentes en el paquete java.lang que se importa por defecto.