A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题!!请说出理由!

21 个回复

倒序浏览
旗木卡卡西 来自手机 中级黑马 2015-11-13 09:42:14
沙发
求解
回复 使用道具 举报
本帖最后由 李永佳 于 2015-11-13 12:10 编辑

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

回复 使用道具 举报
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的.
回复 使用道具 举报
其实简单点说,就是new(看见new就是创建对象) 代表的是在堆内存中创建对象。而String类是引用数据类型中很特殊的一个,它其实是一个不可改变的特殊常量。String字符串所在的位置是方法区的常量池里。前者创建俩个对象,一个在常量池,一个在堆内存。后者只创建了一个对象,就在常量池中。
回复 使用道具 举报
帮你顶下贴
回复 使用道具 举报
帮你顶一下啦
回复 使用道具 举报
两个本质上没有区别吧。第一种写法是严格按照面向对象思想来写的,第二种是c语言里面的写法,遗留到了Java中。因为字符串类型平常用的太多了,所以第二种这种简单的写法也被允许。
回复 使用道具 举报
oup 中级黑马 2015-11-13 22:42:30
9#
区别知道一点点,楼上解释得很好!
回复 使用道具 举报
学到了!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
学习了      
回复 使用道具 举报
+icer+ 中级黑马 2015-11-14 10:54:31
12#
new 会创建新字符串对象
回复 使用道具 举报
帮你顶下贴
回复 使用道具 举报

哈哈  多谢,,能解答吗
回复 使用道具 举报
空间问题
回复 使用道具 举报

说的太随便了点吧,太精辟了,看不懂
回复 使用道具 举报
迷路森林 发表于 2015-11-13 20:16
其实简单点说,就是new(看见new就是创建对象) 代表的是在堆内存中创建对象。而String类是引用数据类型中 ...

小白终于看懂了,,,谢谢
回复 使用道具 举报
森然 中级黑马 2015-11-20 00:34:03
18#
String s= new String("heima")在堆内存中开空间, String s= new String("heima")在常量池里
回复 使用道具 举报
前者在内存中有创建新对象,而后者只是将地址值赋给变量名
回复 使用道具 举报
wx_YXxWrUwd 来自手机 中级黑马 2015-11-20 00:44:57
20#
学习了 大神真多
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马