который будет сравнивать ссылки, а не строки?
Есть ли где-то объяснение как работает switch case по строкам в kotlin (идеально в android)?
Разве что ифом.
Скорее нет, но можно сделать свою обёртку, которая в equals/hashCode будет сравнивать ссылки. Но вообще очень сомнительная затея, зачем вам это?
В kotlin, как и в Java строки не имеют глобальной identity, поэтому сравнивать их по ссылкам абсолютно бессмысленно
Эм. Т.е. сравнивать конечно очень странно, но не совсем честно говорить, что у строк нету identity: fun main() { val a = "abc" val b = java.lang.String("abc") as kotlin.String println(a == b) //true println(a === b) //false }
Она не гарантируется. JVM может константы инлайнить
К примеру ваш же пример: https://pl.kotl.in/lPlLqTtG6
new гарантированно (по JLS) создаёт новый объект, и если потянуться к его identity, никто его не заинлайнит
Наличие пула строк (из-за которого действительно будет ссылка иногда совпадать) не означает, что identity нету. Т.е. да, тот же new тебе всегда новую строку выплюнет.
В последнем докладе Елизаров назвал это по-моему локальной идентичностью.
В случае если это одна строка, почему нет?
Я не понял, в чем вопрос. Для строк сравнение по ссылке не осмыслено. Если вы это для скорости делаете, босьте, это уже внутри JVM оптимизирвоан.
Ух, тогда точно бросайте эту затею
Потому что вы с этой "оптимизации" ничего не выиграете
Я написал почему. Это сравнение уже оптимизируется в JVM. Лучше вы не сделаете точно.
уже давно всё за вас оптипимизировали
Обсуждают сегодня