Давайте разберем цикл до индивидуального сравнения.В основном происходит сравнение, подобное этому:
arrayOf(2, 3) == arrayOf(2, 3) // yields false
arrayListOf(2, 3) == arrayListOf(2, 3) // yields true
arrayOf(...)
создает kotlin.Array
и arrayListOf(...)
и kotlin.collections.ArrayList
.
Когда вы звоните contains(...)
из Array
он проверит ссылку своих значений, которая, очевидно, отличается, так как конструктор вызывается дважды, каждый раз получая новую ссылку.
Когда вы вызываете contains(...)
из ArrayList
, он проверяет наличиесодержимое его значений, которое действительно одинаково.
Примечание:
Если вы введете arrayOf(2, 3) == arrayOf(2, 3)
в IntelliJ, оно даже предупредит вас
Сравнение опасных массивов
и подсказка для его исправления - заменить ==
на contentEquals
.Поскольку вы хотите сделать это для нескольких элементов в вашем массиве, вы должны сделать это для каждого элемента (по крайней мере, пока не будет совпадения), например, используя any
.
Итак, мы приходим к тому, что Аомин уже заключил:
obs.any { it.contentEquals(arrayOf(2,3)) }