I've just started to learn java, and I met some confusing codes:
String s0 = new String("tava");
System.out.println(s0 == s0.intern());
String s1 = "hava";
String s2 = new StringBuilder("ha").append("va").toString();
System.out.println(s2 == s2.intern());
String s3 = new StringBuilder("ga").append("va").toString();
System.out.println(s3 == s3.intern());
String s4 = new StringBuilder("lava").toString();
System.out.println(s4 == s4.intern());
String s5 = new StringBuilder("ja").append("va").toString();
System.out.println(s5 == s5.intern());
The results are:
false
false
true
false
false
My jdk is 1.8, I want to know the details about how it runs in JVM(heap, stack and constant pool) to make out why the results will be like these.