java常量池以及垃圾回收

我在看书的时候看到了一个矛盾的点,也许是我哪里理解错了

编译期产生的字面量,会在类加载的时候存放到常量池里

比如说 我的代码里有这么一行

String s="字符串" ;

那么加载这个类的时候,就会在常量池里创建这个对象,然后这段代码

并不是马上就用到,假设一小时后才用到,那么这个字符串对象马上就被回收了,
因为没有一个String的引用指向它。刚刚创建的对象就被回收了,这里我觉得有些矛盾。

然后一个小时后执行String s="字符串" ;这段代码,他的对象从哪里?类加载时建立的 "字符串" 对象已经移出常量池了啊。

存放到常量池里的字符串是不会被回收的。