Porównanie obiektów całkowitych [duplikat]

To pytanie ma już odpowiedź tutaj:

Jak właściwie porównać dwie liczby całkowite w Javie? 8 odpowiedzi

Mam następujący kod:

public class Test {

    public static void main(String[] args) {

        Integer alpha = new Integer(1);
        Integer foo = new Integer(1);

        if(alpha == foo) {
            System.out.println("1. true");
        }

        if(alpha.equals(foo)) {
            System.out.println("2. true");
        }

    } 

}

Dane wyjściowe są następujące:

2. true

Jednak zmiana typuInteger object doint wygeneruje inny wynik, na przykład:

public class Test {

    public static void main(String[] args) {

        Integer alpha = new Integer(1);
        int foo = 1;

        if(alpha == foo) {
            System.out.println("1. true");
        }

        if(alpha.equals(foo)) {
            System.out.println("2. true");
        }

    } 

}

Nowa wydajność:

1. true
2. true

Jak to może być? Dlaczego pierwszy przykładowy kod nie wyświetla1. true?

questionAnswers(5)

yourAnswerToTheQuestion