【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 有加锁,性能差一些)
posted @ 2023-02-16 17:29  aaacarrot  阅读(85)  评论(0编辑  收藏  举报