Java中创建一个字符串的方式有很多种,常见如:
String s = new String("riqi"); String s = "riqi";
但两者有什么区别呢?
要知道,Java中new一个对象实际上是在栈内存中创建一个引用类型指向到堆内存中的对象,而字符串对象一旦创建就不能变更。
Java为String类型提供了缓冲池机制,即当使用双引号方式创建字符串对象时,Java环境首先会从字符串缓冲池中寻找相同内容的字符串,如果找到则直接拿过来使用,如果没有则创建一个新的字符串并添加到字符串缓冲池中。比如:
String s1 = "riqi"; String s2 = "riqi";
可以理解为变量s1和s2同时指向了堆内存中字符串缓冲池中同一个字符串存储对象。
因为有缓冲池的机制,因此需要new一个字符串对象时,一般采用String s = "riqi"的方式,效率更高。