Состояние при
pay[0]==point[0]
выражение, использует оператор равенства == для сравнения ссылки
Integer pay[0]
за равенство со ссылкой
Integer point[0]
Как правило, когда значения примитивного типа (например, int, ...) сравниваются с ==, результат равен true, если оба значения идентичны. Когда ссылки (такие как Integer, String, ...) сравниваются с ==, результат равен true, если обе ссылки ссылаются на один и тот же объект в памяти.
Чтобы сравнить фактическое содержимое (или информацию о состоянии) объектов на равенство, необходимо вызвать метод.
Таким образом, с этим
Integer[] point = new Integer[2];
Выражение: вы создаете новый объект, который получил новую ссылку, и назначаете его для точечной переменной.
Например:
int a = 1;
int b = 1;
Integer c = 1;
Integer d = 1;
Integer e = new Integer(1);
Для сравнения a с b используйте:
a == b
потому что они оба являются значениями примитивного типа.
Для сравнения с c используйте:
a == c
из-за функции автобокса.
для сравнения c использованием e:
c.equals(e)
из-за новой ссылки в переменной e.
для сравнения c с d лучше и безопаснее использовать:
c.equals(d)
из-за:
Как вы знаете, оператор ==, применяемый к объектам-оберткам, только проверяет, имеют ли объекты идентичные области памяти. Следовательно, следующее сравнение, вероятно, потерпит неудачу:
Integer a = 1000;
Integer b = 1000;
if (a == b) . . .
Однако реализация Java может, если она выберет, обернуть часто встречающиеся значения в идентичные объекты, и, таким образом, сравнение может быть успешным. Эта двусмысленность не то, что вы хотите. Решение проблемы - вызвать метод equals при сравнении объектов-оболочек.