Levando em consideração o seguinte código:
String h = new String ("hello ");
String h1 = "hello ";
String w = "world";
System.out.println("hello ");
System.out.println(h1 + "world");
System.out.println("Hello " == h1);
Na primeira linha é considerado que foi criado 2 novos objetos, um objeto pelo new e outro pela forma literal "hello " (este último armazenado no pool). Dessa forma a String h1 reutiliza o "hello " do pool e não cria um novo objeto. Até ai tudo bem.
E se fosse ao contrário?
String h1 = "hello ";
String h = new String ("hello ");
String h1 criaria um novo objeto String e "hello " seria armazenado no pool. Na segunda linha, seria criado apenas um novo objeto (pelo new) e "hello " seria reaproveitado do pool? É isso mesmo?