Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
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 []
; выше, я привел к нему простой массив (проще, чем вызов функции неявного преобразования), а затем сравнил упакованные массивы. Эти обертки, хотя и поддерживаются массивом []
, также дают вам все вкусности коллекций.
Scala не отменяет равенство массива, потому что это невозможно. Можно переопределить методы только при создании подклассов. Поскольку массив не имеет подклассов (что невозможно), Scala не может переопределить его методы.
Но Scala String - это также просто Java String, но Scala переопределяет равные для сравнения естественного равенства.
Скала ничего там не перекрывает; java.lang.String
имеет зависящую от значения реализацию equals()
(как и многие другие классы Java, но в отличие от массивов).