Size: a a a

2020 June 23

DC

Denis Chikanov in learn.java
The programming language that wants to rescue the world from dangerous code
https://www.protocol.com/rust-programming-safety-security
источник

DC

Denis Chikanov in learn.java
The programming language that wants to rescue the world from dangerous code
https://www.protocol.com/rust-programming-safety-security
источник

СС

Сергей Соколов... in learn.java
Quantum Harmonizer
Оператор = не создаёт строки.
Вопрос про строковые литералы?
Да, наверное не так выразился
источник

QH

Quantum Harmonizer in learn.java
Сергей Соколов
Да, наверное не так выразился
Строковые литералы складываются виртуальной машиной в хэш-таблицу интернированных строк.
источник

GV

Gukov Viktor in learn.java
Сергей Соколов
Народ, внесите ясность. Где хранятся строки, создаваемые через оператор "="? Если они создаются через new, то они попадают в HashSet, хранимый в PermGen (т.н. String pool). Получается, что неинтернированные строки пушатся в стек?
При использовании литерала, JVM сначала ищет его в пуле. Если находит просто возвращает, если не находит - интернирует и возвращает
источник

GV

Gukov Viktor in learn.java
При new объект строки всегда кидается в кучу, значение сохраняется в пул (?)
источник

QH

Quantum Harmonizer in learn.java
впрочем, все строки в куче
источник

GV

Gukov Viktor in learn.java
Gukov Viktor
При new объект строки всегда кидается в кучу, значение сохраняется в пул (?)
Блин, не помню, при new сохраняется в пуле или нет
источник

СС

Сергей Соколов... in learn.java
Хм, тогда почему если выполнить new String("Hello") == new String("Hello"), то получим false, а если убрать new или вызвать у каждой строки intern(), то получим true?
источник

СС

Сергей Соколов... in learn.java
Ещё можно получить true, сравнивая через equals(), но он медленный из-за посимвольного сравнения
источник

P

Pan Kotek in learn.java
Сергей Соколов
Хм, тогда почему если выполнить new String("Hello") == new String("Hello"), то получим false, а если убрать new или вызвать у каждой строки intern(), то получим true?
Потому что в первом случае ссылки разные будут.
источник

СС

Сергей Соколов... in learn.java
Если все строки в куче (т.е. в hashset'е), то == не должен давать false. Ну или я уже заучился
источник

GV

Gukov Viktor in learn.java
Сергей Соколов
Хм, тогда почему если выполнить new String("Hello") == new String("Hello"), то получим false, а если убрать new или вызвать у каждой строки intern(), то получим true?
Потому что в первом случае сравниваются две разных ссылки в куче, а во втором случае две одинаковых объекта из пула
источник

СС

Сергей Соколов... in learn.java
А, дошло, строковый объект в сете будет один, но разными будут именно ссылки)
источник

ИВ

Илья Высоцкий... in learn.java
может ли такое быть, что H2 база не понимает что-то из этого запроса?"SELECT g.* FROM groups g WHERE ? = (SELECT COUNT(*) FROM students s WHERE s.group_id = g.group_id)
источник

СС

Сергей Соколов... in learn.java
Тогда что происходит, если  вызвать intern()? Почему == начинает возвращать true? Чтение доков не помогло
источник

РХ

Ринат Харисов... in learn.java
Илья Высоцкий
может ли такое быть, что H2 база не понимает что-то из этого запроса?"SELECT g.* FROM groups g WHERE ? = (SELECT COUNT(*) FROM students s WHERE s.group_id = g.group_id)
вот здесь "WHERE ?" где знак вопроса имя столбца должно быть что ли?
источник

ИВ

Илья Высоцкий... in learn.java
Ринат Харисов
вот здесь "WHERE ?" где знак вопроса имя столбца должно быть что ли?
тут количество студентов я указываю
источник

N🌌

Nazarii 🌌 in learn.java
Сергей Соколов
Тогда что происходит, если  вызвать intern()? Почему == начинает возвращать true? Чтение доков не помогло
Из javadocs
источник

РХ

Ринат Харисов... in learn.java
Илья Высоцкий
тут количество студентов я указываю
это не валидный синтаксис
источник