常量池(constant pool)指的是在编译期被确定,并被保存在以编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
实际上 String str = new String("hellow");创建了两个对象,一个是在编译期间就已经存在的“hello”字符串常量,放在了常量池中;另一个是new关键字创建出来的String对象。
用new String()创建的字符串不是常量,不能在编译期就确定,所以 new String()创建的字符串不放入常量池,它们有自己的地址空间。