Ответ
Оператор !! в Kotlin используется для принудительного приведения nullable-типа к non-null типу. Он выбрасывает NullPointerException, если значение равно null.
Пример:
val nullableString: String? = "Hello"
val nonNullString: String = nullableString!! // Работает
println(nonNullString.length)
val nullString: String? = null
val crash: String = nullString!! // Выбросит NPE
Использовать !! стоит только когда ты абсолютно уверен, что значение не может быть null. В остальных случаях лучше использовать безопасные вызовы (?.) или let с ?.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Смотри, есть в Котлине такая штука — два восклицательных знака подряд, !!. По-простому это называется "оператор "на, блядь, получи!". Суть простая: ты берешь переменную, которая может быть пустой (nullable), и говоришь языку: "Да похуй, чувак, я уверен, тут не null, делай как я сказал!".
Вот смотри, как это выглядит в деле:
val nullableString: String? = "Hello"
val nonNullString: String = nullableString!! // Всё чики-пуки, работает
println(nonNullString.length)
Тут всё ок, потому что в строке реально есть текст. Но вся соль в том, что если твоя уверенность — это пиздёж собачий, и там на самом деле null, то тебе прилетит NullPointerException прямо в лоб. Ядрёна вошь!
val nullString: String? = null
val crash: String = nullString!! // Ёб твою мать! Вылетает NPE нахуй!
Вот и весь цирк. Использовать эту поебень нужно только в одном случае: когда ты на 146% уверен, что значение не может быть нулевым. Типа, только что сам его там проинициализировал и никуда не отпускал. Во всех остальных ситуациях — это признак говнокода и кривых рук. Настоящие пацаны используют безопасные вызовы (?.), let с ? или Elvis-оператор (?:). А !! — это как пойти по тонкому льду с криком "Да я уверен, он выдержит!". Может, и выдержит. А может, и хуй с горы — пизда рулю.