169 похожих чатов

Привет. Возможно ли в Koltin сделать switch case по строкам,

который будет сравнивать ссылки, а не строки?
Есть ли где-то объяснение как работает switch case по строкам в kotlin (идеально в android)?

17 ответов

9 просмотров

Разве что ифом.

Скорее нет, но можно сделать свою обёртку, которая в equals/hashCode будет сравнивать ссылки. Но вообще очень сомнительная затея, зачем вам это?

В kotlin, как и в Java строки не имеют глобальной identity, поэтому сравнивать их по ссылкам абсолютно бессмысленно

Alexander Nozik
В kotlin, как и в Java строки не имеют глобальной ...

Эм. Т.е. сравнивать конечно очень странно, но не совсем честно говорить, что у строк нету identity: fun main() { val a = "abc" val b = java.lang.String("abc") as kotlin.String println(a == b) //true println(a === b) //false }

Alex Levin
Эм. Т.е. сравнивать конечно очень странно, но не с...

Она не гарантируется. JVM может константы инлайнить

Alex Levin
Эм. Т.е. сравнивать конечно очень странно, но не с...

К примеру ваш же пример: https://pl.kotl.in/lPlLqTtG6

Alexander Nozik
Она не гарантируется. JVM может константы инлайнит...

new гарантированно (по JLS) создаёт новый объект, и если потянуться к его identity, никто его не заинлайнит

Alexander Nozik
К примеру ваш же пример: https://pl.kotl.in/lPlLqT...

Наличие пула строк (из-за которого действительно будет ссылка иногда совпадать) не означает, что identity нету. Т.е. да, тот же new тебе всегда новую строку выплюнет.

Alex Levin
Наличие пула строк (из-за которого действительно б...

В последнем докладе Елизаров назвал это по-моему локальной идентичностью.

Nikita-Kulikov (Old) Автор вопроса
Alexander Nozik
В kotlin, как и в Java строки не имеют глобальной ...

В случае если это одна строка, почему нет?

Nikita Kulikov (Old)
В случае если это одна строка, почему нет?

Я не понял, в чем вопрос. Для строк сравнение по ссылке не осмыслено. Если вы это для скорости делаете, босьте, это уже внутри JVM оптимизирвоан.

Nikita Kulikov (Old)
Перформанс?

Ух, тогда точно бросайте эту затею

Nikita Kulikov (Old)
Почему?

Потому что вы с этой "оптимизации" ничего не выиграете

Nikita Kulikov (Old)
Почему?

Я написал почему. Это сравнение уже оптимизируется в JVM. Лучше вы не сделаете точно.

Nikita Kulikov (Old)
Почему?

уже давно всё за вас оптипимизировали

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

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
А чем вам питонисты не угодили?😂
.
79
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
83
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
8
free(NULL) это UB?
#
8
Карта сайта