黑马程序员技术交流社区

标题: String s1="abc"和String s1=new String("abc")二者有什么区别? [打印本页]

作者: 小志颖    时间: 2016-4-14 15:44
标题: String s1="abc"和String s1=new String("abc")二者有什么区别?
String s1="abc"和String s1=new String("abc");都是引用数据类型,二者都一样吗?有什么区别?
是一个储存在了常量池里,一个储存在堆内存吗?还有什么不同的?
作者: 忧郁的小绵羊丶    时间: 2016-4-14 15:46
我才学到数组,String s1="abc"也是引用数据类型吗?不懂
作者: zhongyuxin1011    时间: 2016-4-14 17:43
String s1 = "abc" :s1是存储在栈里。
先在栈中创建一个对String类的对象引用变量s1,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令s指向”abc”,如果已经有”abc” 则直接令s1指向“abc”。

String s2 = new String("abc") : s2是存储在堆里。
每调用一次就会创建一个新的对象。
作者: 小白想学javaEE    时间: 2016-4-14 20:24
都是存储在堆内存的吧,只是String a="abc";存储在String pool里面,new String是新创建一个对象。
作者: 小志颖    时间: 2016-4-15 23:52
小白想学javaEE 发表于 2016-4-14 20:24
都是存储在堆内存的吧,只是String a="abc";存储在String pool里面,new String是新创建一个对象。 ...

嗯嗯,灰常感谢
作者: 小志颖    时间: 2016-4-16 00:06
忧郁的小绵羊丶 发表于 2016-4-14 15:46
我才学到数组,String s1="abc"也是引用数据类型吗?不懂

是基本数据类型的,    一起加油!
作者: 李亚东_JAVAEE    时间: 2016-4-16 00:10
看得挺快,加油

作者: NeverBack    时间: 2016-4-16 13:28
学习学习!!!!!
作者: 小白想学javaEE    时间: 2016-4-16 22:13
小志颖 发表于 2016-4-15 23:52
嗯嗯,灰常感谢

再补充下,new String("abc")是现在对象池里面先创建了“abc”对象,然后又在堆内存里面开辟空间创建“abc”对象,最后先创建的在对象池里面的那个“abc”对象就成了垃圾存在于内存中,这种方法无论是效率还是内存利用都不好,所以开发时都是直接使用str=“abc”这样




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