【JAVA】String str = "" 和 new String() 的区别
在JVM里面,字符串是放在常量池里面的。
String str = "xx"; 这个指令无论执行多少次,他们都是指向同一个对象,就是常量池里面的那一个,如果没有就创建,但如果有,就不会再创建了,只会在栈内存开辟一个名字叫 str 的空间,用来存放指向到 "xx" 在常量池里面的地址。
(所以执行太多,栈上而也是有开销的,只是不大而已)
但是,new String("xx") 这种写法,它是会通过 String 的构造方法,创建一个对象,放在堆里面的。就是常量池里面已经有了,它不用,但它会从常量池里面把这个 xx 复制一份到自己的堆里面。执行100次,JVM堆里面就有 100 个 xx 对象了,看起来一样,但它们却又是各玩各的。
论性能的话: 最不能用的是 new String() 如果拼装频繁的话,StringBuilder 优先 StringBuffer (StringBuffer 有加锁,性能差一些)