new String("..") 和 "..." 初始化变量的区别??

笑着飘走 2017-08-23 02:32:27
读书《Effective Java >

里面不建议 在循环,迭代,递归,里面用
String s = new String("string");

而是建议:
String s = "string";

不懂有什么区别,变量 s 不都是占同样长的内存???
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_23327675 2017-08-23
  • 打赏
  • 举报
回复
new String("string")会在堆空间里申请新内存,而常量则放在常量池里,节省空间
笑着飘走 2017-08-23
  • 打赏
  • 举报
回复
谢谢各位老师~~~~你们都是好人,么么哒~
soton_dolphin 2017-08-23
  • 打赏
  • 举报
回复
String = new String("") 不但迭代里面不要用,最好所有情况都应该避免,因为这样会生产很多String对象。 而 String = "" 的字符串引用是存在字符串池里面,可以重复使用
笑着飘走 2017-08-23
  • 打赏
  • 举报
回复
引用 1 楼 aschouas 的回复:
new 关键字会创建新的内存占用,如果在在循环,迭代,递归里面使用,内存开销很大,而使用String s = "string";不会在循环,迭代,递归的使用中声明新的内存,而是指向同一内存地址,也就是减少了内存的开销
啊,好吧~ 那,意思是在虚拟机哪里,每次用 String s = "string"; 的时候,都会在内存检测 "" 中的值是否存在?可是每次检测也会很费资源吧?
一个治疗术 2017-08-23
  • 打赏
  • 举报
回复
引用 2 楼 pany1209 的回复:
[quote=引用 1 楼 aschouas 的回复:] new 关键字会创建新的内存占用,如果在在循环,迭代,递归里面使用,内存开销很大,而使用String s = "string";不会在循环,迭代,递归的使用中声明新的内存,而是指向同一内存地址,也就是减少了内存的开销
[/quote] 改名字了???潘金莲满足不了你了吗
笑着飘走 2017-08-23
  • 打赏
  • 举报
回复
我用代码试了一下。
String s1 = new String("ss");
		String s2 = new String("ss");
		String s3 = "ss";
		String s4 = "ss";
确实 直接 String s = "fsdfas"; 这样的变量都是引用同一个,那么 他们内部是怎么实现的???
李德胜1995 2017-08-23
  • 打赏
  • 举报
回复
引用 1 楼 aschouas 的回复:
new 关键字会创建新的内存占用,如果在在循环,迭代,递归里面使用,内存开销很大,而使用String s = "string";不会在循环,迭代,递归的使用中声明新的内存,而是指向同一内存地址,也就是减少了内存的开销
一个治疗术 2017-08-23
  • 打赏
  • 举报
回复
new 关键字会创建新的内存占用,如果在在循环,迭代,递归里面使用,内存开销很大,而使用String s = "string";不会在循环,迭代,递归的使用中声明新的内存,而是指向同一内存地址,也就是减少了内存的开销

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧