¿Cuál es la diferencia entre el entero a = 5 y el nuevo entero (5)?

Si escribo debajo del código (en java):

Integer a =new Integer(5);
Integer b=new Integer(5);
if(a==b){
  System.out.println("In ==");
}
if(a.equals(b)){
 System.out.println("In equals");
}

Mi salida es: "En iguales" Pero si cambio la primera y la segunda línea a ->

Integer a =5;
Integer b=5;

entonces mi o / p es:

In == 
In equals

Entonces, ¿cuál es la diferencia en la creación de un objeto Integer? ¿Cómo se crea cuando lo hacemos?Integer a =5?

¿Significa que los objetos ayb se refieren al mismo objeto, si creo?Integer a=5 y crea otro objetoInteger b=5 ?

Respuestas a la pregunta(5)

Su respuesta a la pregunta