Почему `Array (0,1,2) == Array (0,1,2)` не возвращает ожидаемый результат?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

26
задан soc 31 July 2018 в 17:38
поделиться

3 ответа

Scala 2.7 попытался добавить функциональность в массивы Java [] и столкнулся с проблемными случаями. Scala 2.8 объявил, что Array[T] - это T[], но он предоставляет оболочки и эквиваленты.

Попробуйте следующее в 2.8 (правка / примечание: по состоянию на RC3 GenericArray равно ArraySeq - благодаря ретрониму за указание на это):

import scala.collection.mutable.{GenericArray=>GArray, WrappedArray=>WArray}
scala> GArray(0,1,2) == GArray(0,1,2)
res0: Boolean = true

scala> (Array(0,1,2):WArray[Int]) == (Array(0,1,2):WArray[Int])
res1: Boolean = true

GenericArray действует так же, как Array, за исключением того, что во все коллекции Scala добавлены вкусности. WrappedArray обертывает массив Java []; выше, я привел к нему простой массив (проще, чем вызов функции неявного преобразования), а затем сравнил упакованные массивы. Эти обертки, хотя и поддерживаются массивом [], также дают вам все вкусности коллекций.

20
ответ дан Rex Kerr 31 July 2018 в 17:38
поделиться

Scala не отменяет равенство массива, потому что это невозможно. Можно переопределить методы только при создании подклассов. Поскольку массив не имеет подклассов (что невозможно), Scala не может переопределить его методы.

8
ответ дан Daniel C. Sobral 31 July 2018 в 17:38
поделиться

Но Scala String - это также просто Java String, но Scala переопределяет равные для сравнения естественного равенства.

Скала ничего там не перекрывает; java.lang.String имеет зависящую от значения реализацию equals() (как и многие другие классы Java, но в отличие от массивов).

5
ответ дан Michael Borgwardt 31 July 2018 в 17:38
поделиться
  • 1
    Я просто установил последнюю версию Firefox, и это работало на меня. Я подозреваю, что у или Вас есть более старая версия Firefox, или у Вас есть дополнение Firefox, которое препятствует тому, чтобы он работал. – mikeyreilly 17 July 2015 в 08:36
  • 2
    Я просто установил последнюю версию Firefox, и это работало на меня. Я подозреваю, что у или Вас есть более старая версия Firefox, или у Вас есть дополнение Firefox, которое препятствует тому, чтобы он работал. – mikeyreilly 17 July 2015 в 08:36
  • 3
    Я просто установил последнюю версию Firefox, и это работало на меня. Я подозреваю, что у или Вас есть более старая версия Firefox, или у Вас есть дополнение Firefox, которое препятствует тому, чтобы он работал. – mikeyreilly 17 July 2015 в 08:36
  • 4
    Я просто установил последнюю версию Firefox, и это работало на меня. Я подозреваю, что у или Вас есть более старая версия Firefox, или у Вас есть дополнение Firefox, которое препятствует тому, чтобы он работал. – mikeyreilly 17 July 2015 в 08:36
  • 5
    Я просто установил последнюю версию Firefox, и это работало на меня. Я подозреваю, что у или Вас есть более старая версия Firefox, или у Вас есть дополнение Firefox, которое препятствует тому, чтобы он работал. – mikeyreilly 17 July 2015 в 08:36
Другие вопросы по тегам:

Похожие вопросы: