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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s1="abc"和String s1=new String("abc");都是引用数据类型,二者都一样吗?有什么区别?
是一个储存在了常量池里,一个储存在堆内存吗?还有什么不同的?

8 个回复

倒序浏览
我才学到数组,String s1="abc"也是引用数据类型吗?不懂
回复 使用道具 举报
String s1 = "abc" :s1是存储在栈里。
先在栈中创建一个对String类的对象引用变量s1,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令s指向”abc”,如果已经有”abc” 则直接令s1指向“abc”。

String s2 = new String("abc") : s2是存储在堆里。
每调用一次就会创建一个新的对象。
回复 使用道具 举报 1 0
都是存储在堆内存的吧,只是String a="abc";存储在String pool里面,new String是新创建一个对象。
回复 使用道具 举报 1 0
小白想学javaEE 发表于 2016-4-14 20:24
都是存储在堆内存的吧,只是String a="abc";存储在String pool里面,new String是新创建一个对象。 ...

嗯嗯,灰常感谢
回复 使用道具 举报
忧郁的小绵羊丶 发表于 2016-4-14 15:46
我才学到数组,String s1="abc"也是引用数据类型吗?不懂

是基本数据类型的,    一起加油!
回复 使用道具 举报
看得挺快,加油
回复 使用道具 举报
NeverBack 来自手机 中级黑马 2016-4-16 13:28:34
8#
学习学习!!!!!
回复 使用道具 举报

再补充下,new String("abc")是现在对象池里面先创建了“abc”对象,然后又在堆内存里面开辟空间创建“abc”对象,最后先创建的在对象池里面的那个“abc”对象就成了垃圾存在于内存中,这种方法无论是效率还是内存利用都不好,所以开发时都是直接使用str=“abc”这样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马