黑马程序员技术交流社区

标题: String s= new String("heima")和String s= "heima"的区别? [打印本页]

作者: 旗木卡卡西    时间: 2015-11-13 09:31
标题: String s= new String("heima")和String s= "heima"的区别?
如题!!请说出理由!
作者: 旗木卡卡西    时间: 2015-11-13 09:42
求解
作者: 李永佳    时间: 2015-11-13 12:08
本帖最后由 李永佳 于 2015-11-13 12:10 编辑

如果两个字符串在for循环中使用+操作符进行拼接,那么每次循环都会产生一个新的字符串对象。这不仅浪费内存空间同时还会影响性能。类似的,如果初始化字符串对象,尽量不要使用构造方法,而应该直接初始化。比方说:  //Slower Instantiation
String bad = new String("Yet another string object");
//Faster Instantiation
String good = "Yet another string object"


作者: 微笑、守望    时间: 2015-11-13 15:29
String s= new String("heima");是在堆内存中开辟一个空间用于存储heima字符串,然后将这个堆内存的地址值赋给s,而String s= "heima"是在方法区的常量池中创建一个空间存贮heima字符串,然后将常量池存贮的地址值赋给s, 这两个s的调用的方式是不一样的,当String s= new String("heima")的s在使用时如果给s引用重新创建对象,那么原对象就变成垃圾了,而String s= "heima"在对s重新赋值后不会发生这种情况,因为这个s始终是指向方法区的heima的.
作者: 迷路森林    时间: 2015-11-13 20:16
其实简单点说,就是new(看见new就是创建对象) 代表的是在堆内存中创建对象。而String类是引用数据类型中很特殊的一个,它其实是一个不可改变的特殊常量。String字符串所在的位置是方法区的常量池里。前者创建俩个对象,一个在常量池,一个在堆内存。后者只创建了一个对象,就在常量池中。
作者: 1379号监听员    时间: 2015-11-13 21:44
帮你顶下贴
作者: young_ants    时间: 2015-11-13 21:59
帮你顶一下啦
作者: 冷光之神    时间: 2015-11-13 22:24
两个本质上没有区别吧。第一种写法是严格按照面向对象思想来写的,第二种是c语言里面的写法,遗留到了Java中。因为字符串类型平常用的太多了,所以第二种这种简单的写法也被允许。
作者: oup    时间: 2015-11-13 22:42
区别知道一点点,楼上解释得很好!
作者: 超级宝贝乐爷    时间: 2015-11-14 00:38
学到了!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 你是对的    时间: 2015-11-14 09:57
学习了      
作者: +icer+    时间: 2015-11-14 10:54
new 会创建新字符串对象
作者: 基础班庄艳平    时间: 2015-11-19 21:14
帮你顶下贴
作者: 旗木卡卡西    时间: 2015-11-19 23:57
基础班庄艳平 发表于 2015-11-19 21:14
帮你顶下贴

哈哈  多谢,,能解答吗
作者: 李正春    时间: 2015-11-20 00:20
空间问题
作者: 旗木卡卡西    时间: 2015-11-20 00:23
李正春 发表于 2015-11-20 00:20
空间问题

说的太随便了点吧,太精辟了,看不懂
作者: 旗木卡卡西    时间: 2015-11-20 00:25
迷路森林 发表于 2015-11-13 20:16
其实简单点说,就是new(看见new就是创建对象) 代表的是在堆内存中创建对象。而String类是引用数据类型中 ...

小白终于看懂了,,,谢谢
作者: 森然    时间: 2015-11-20 00:34
String s= new String("heima")在堆内存中开空间, String s= new String("heima")在常量池里
作者: nice非飞    时间: 2015-11-20 00:43
前者在内存中有创建新对象,而后者只是将地址值赋给变量名
作者: wx_YXxWrUwd    时间: 2015-11-20 00:44
学习了 大神真多
作者: paulchoi1    时间: 2015-11-20 00:56
学习了!谢谢各位大神
作者: yubail    时间: 2015-11-20 10:31
我来顶帖的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2