Size: a a a

2020 September 14

AG

Alexey Genus in pro.jvm
Жёстко 😁
источник

AE

Alexandr Emelyanov in pro.jvm
Alexey Genus
Блин, никогда об этом не думал, но прикольно) Если после этого кода написать
System.outout.println("TRUE");
то напечатается FALSE.
Очень весело)
Я как то пару лет назад на собесах такой пазлер давал.

Мол как можно поменять значение строки без изменения ссылки + интернирование
источник

AG

Alexey Genus in pro.jvm
Кажется, я бы прошёл 😂
источник

AE

Alexandr Emelyanov in pro.jvm
Да😂
источник

VP

Vladislav Plakhov in pro.jvm
Alexandr Emelyanov
Я как то пару лет назад на собесах такой пазлер давал.

Мол как можно поменять значение строки без изменения ссылки + интернирование
А как знание вот этого характеризует кандидата?
источник

QH

Quantum Harmonizer in pro.jvm
Vladislav Plakhov
А как знание вот этого характеризует кандидата?
как человека с чувством юмора)
источник

VP

Vladislav Plakhov in pro.jvm
Quantum Harmonizer
как человека с чувством юмора)
Или большим количеством свободного времени
источник

かたかわ in pro.jvm
Alexey Genus
Блин, никогда об этом не думал, но прикольно) Если после этого кода написать
System.outout.println("TRUE");
то напечатается FALSE.
Очень весело)
"TRUE", получается, это адрес на память в стринг пуле, где мы поменяли значение через рефлексию?
источник

AG

Alexey Genus in pro.jvm
Не совсем на память, но это один и тот же объект
источник

QH

Quantum Harmonizer in pro.jvm
かたかわ
"TRUE", получается, это адрес на память в стринг пуле, где мы поменяли значение через рефлексию?
угу
источник

かたかわ in pro.jvm
Немного магии на ночь, спасибо 😂
источник

VP

Vladimir Petrakovich in pro.jvm
Alexey Genus
class Scratch {

 public static void main(String[] args) throws Exception {
   String trueStr = "TRUE";

   var valueField = String.class.getDeclaredField("value");

   valueField.setAccessible(true);
   valueField.set(trueStr, "FALSE".getBytes());

   System.out.println(trueStr);
 }
}

Вот весь код
И что, это работает на jdk 9+?
источник

かたかわ in pro.jvm
Vladimir Petrakovich
И что, это работает на jdk 9+?
Угу, я потестил на 11
источник

かたかわ in pro.jvm
Только он жалуется, что в будущей версии эта фича будет выпилена
источник

かたかわ in pro.jvm
...
WARNING: All illegal access operations will be denied in a future release
источник

VP

Vladimir Petrakovich in pro.jvm
Хех, до сих пор не запретили
источник

かたかわ in pro.jvm
Ну, в модулях такая штука будет запрещена, если эксплицитно не разрешить
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶... in pro.jvm
Alexey Genus
Блин, никогда об этом не думал, но прикольно) Если после этого кода написать
System.outout.println("TRUE");
то напечатается FALSE.
Очень весело)
А вот это неожиданно :)
источник

AE

Alexandr Emelyanov in pro.jvm
Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶
А вот это неожиданно :)
почему?
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶... in pro.jvm
Alexandr Emelyanov
почему?
Не, если вдуматься, то все правильно. Но контринтуитивно
источник