Похоже, проблема в следующей строке:
if (Location == TestLoc)
Предположительно, TestLoc
- это массив целых чисел, Location
также привязан к массиву.
Приведенный выше тест вернет true, только если переменные TestLoc
и Location
обе указывают на один и тот же экземпляр массива , и не вернет true, если эти две переменные указывают на другой массив случаи , что оба имеют одинаковые целые числа в одинаковых позициях. Вы тестируете "ссылочное равенство" выше - спрашивая, только если эти две вещи одинаковы вещь & mdash; в отличие от "равенства равенства", которое спрашивает, являются ли две вещи эквивалентными , независимо от того, представлены ли они как два отдельных объекта в области памяти компьютера.
В некоторых языках программирования нет такого различия, а некоторые позволяют определять новые типы, которые лучше рассматривать как значения - где идентичность несущественна - чем как сущности, где идентичность может быть важнее любой потенциальной эквивалентности значений. Java использует отдельный метод & mdash; Object#equals()
& mdash; для запроса эквивалентности или равенства значений для экземпляров Object
, тогда как оператор ==
всегда выполняет только одно: он оценивает равенство значений любых двух вещей, даже если эти вещи ссылки на объекты .
Следовательно, при сравнении двух экземпляров массива, как вы здесь, оба из которых являются неким типом Object
, оператор ==
спрашивает, не эквивалентны ли две вещи , указанные на этими ссылками, эквивалентны , а точнее, эквивалентны ли значения самих ссылок . Если они указывают на один и тот же целевой объект, они эквивалентны, но если они этого не делают, не имеет значения, будут ли два разных целевых объекта выглядеть одинаковыми по значению; ==
возвращает false, поскольку два целевых объекта представлены различными ссылками.