Size: a a a

2020 September 14

QH

Quantum Harmonizer in pro.jvm
Larymar r.sorokin
это через стринг делается?
звучит забавно
если мы друг друга корректно поняли
ну ты же строки хочешь подделать?
источник

QH

Quantum Harmonizer in pro.jvm
надо обменять "TRUE".value и "FALSE".value
источник

Lr

Larymar r.sorokin in pro.jvm
Quantum Harmonizer
ну ты же строки хочешь подделать?
я хочу не строку поддерлать а ее интернированное значение
источник

QH

Quantum Harmonizer in pro.jvm
Larymar r.sorokin
я хочу не строку поддерлать а ее интернированное значение
это что такое? Интернированные строки — знаю, интернированное значение — не слышал
источник

Lr

Larymar r.sorokin in pro.jvm
Quantum Harmonizer
это что такое? Интернированные строки — знаю, интернированное значение — не слышал
интернированная строка хранится в пуле строк
я хочу поменять значение в этом пулле
источник

QH

Quantum Harmonizer in pro.jvm
Larymar r.sorokin
интернированная строка хранится в пуле строк
я хочу поменять значение в этом пулле
поменяй
источник

Lr

Larymar r.sorokin in pro.jvm
Quantum Harmonizer
поменяй
мне вокруг java String плясать?
я об этом
в шарпах это делалось через классы что насилуют память
через маршаллинг

я вот и хочу спросить знатоков о точке входа в этот забавный вопрос
источник

QH

Quantum Harmonizer in pro.jvm
Larymar r.sorokin
мне вокруг java String плясать?
я об этом
в шарпах это делалось через классы что насилуют память
через маршаллинг

я вот и хочу спросить знатоков о точке входа в этот забавный вопрос
берёшь String.class, находишь поле value, снимаешь финальность, устраиваешь дестрой
источник

Lr

Larymar r.sorokin in pro.jvm
Quantum Harmonizer
берёшь String.class, находишь поле value, снимаешь финальность, устраиваешь дестрой
спасибо
попробую
источник

AG

Alexey Genus in pro.jvm
Larymar r.sorokin
спасибо
попробую
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);
 }
}

Вот весь код
источник

Lr

Larymar r.sorokin 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);
 }
}

Вот весь код
оу, большое спасибо
у вас это действительно работает по другому
источник

QH

Quantum Harmonizer 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);
 }
}

Вот весь код
оно же финальное
источник

AG

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

AG

Alexey Genus in pro.jvm
Quantum Harmonizer
оно же финальное
Джавке неважно ж
источник

QH

Quantum Harmonizer in pro.jvm
Alexey Genus
Джавке неважно ж
важно, Gson вот содержит особенные костыли для этого
источник

Lr

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

AG

Alexey Genus in pro.jvm
Quantum Harmonizer
важно, Gson вот содержит особенные костыли для этого
Ну, короче, мой код работает, я только что запустил
источник

AG

Alexey Genus in pro.jvm
Это может сломаться, если добавить параметр -XX:+TrustFinalNonStaticFields
источник

AG

Alexey Genus in pro.jvm
Подробнее вот здесь об этом https://shipilev.net/jvm/anatomy-quarks/17-trust-nonstatic-final-fields/
источник

QH

Quantum Harmonizer in pro.jvm
Alexey Genus
Это может сломаться, если добавить параметр -XX:+TrustFinalNonStaticFields
хех, всегда с этим флагом гоняю)
источник