If they are created on the heap they can get gc'd, if they are created in the Constant Pool they will not. If they are resolved at compile time (like your examples) they will (probably) get created in the Constant Pool. If they are created at runtime like String s3 = s1+s2; they will (probably) be created on the heap. The reason for the disclaimer is that Sun does not really tell vendors how to implement the specifications. Some PHD student might create a very inefficient JVM that implements EVERYTHING on the heap (not a very good idea).
"JavaRanch, where the deer and the Certified play" - David O'Meara