Это чувство, когда JVM от IBM считает себя умнее тебя и приходится идти на ухищрения дабы его наебать и сэкономить памяти на долгоживущих строках:
$ cat Main.java
import java.lang.reflect.Field;
public class Main {
public static void main(final String... args) throws Exception {
Field f = String.class.getDeclaredField("value");
f.setAccessible(true);
StringBuilder sb = new StringBuilder(40);
sb.append("01234567890123456789012345");
String s1 = sb.toString();
sb.append("hello, world!");
String s2 = sb.toString();
Object v1 = f.get(s1);
Object v2 = f.get(s2);
System.out.println(v1 == v2);
}
}
$ javac Main.java
$ java Main
false
$ /opt/ibm/java-x86_64-80/bin/java Main
true
обычно долгоживущих объектов у меня вообще нет, но тут неожиданно производственная необходимость возникла чтобы данные жили долго, счастливо и большом количестве