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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么说 String s = new String ("abcdef"); 语句创建了两个对象?

19 个回复

倒序浏览
只要new出来的都在堆内存,"abcdef"在常量池也是对象,有地址
回复 使用道具 举报
String s = new String ("abcdef");

看结果猜过程

我猜应该是这样 String s = new String ("abcdef"); 就等于

new String().name = s;
new String().属性 = “abcdef”;

这个属性应该根据类中的成员属性来决定
回复 使用道具 举报
还没学到String  不懂
回复 使用道具 举报
感谢楼上,学习了
回复 使用道具 举报
String这个类比较特别  除了堆内存还在字符串池建对象
回复 使用道具 举报
受教了,多谢
回复 使用道具 举报
"abcdef"在常量池里,堆里面开辟了一个空间存地址值,另外new出来的肯定有对象,也有地址值,可以用toString打出来看看地址值。
回复 使用道具 举报
堆中一个,字符串常量池一个,没记错的话应该是这样
回复 使用道具 举报
字符串"abcdef"会存在常量池中, new出来的对象存放在堆内存.
回复 使用道具 举报
不是很懂。。。。
回复 使用道具 举报
楼下讲得好  支持一个
回复 使用道具 举报
一个new String是一个对象,存在堆内存; "abcdef"也是一个对象,存在方法区的常量池。
回复 使用道具 举报
String s=new String("aaa");
变量s在栈中 他存着一个地址指向堆中new出来的对象,堆中又存着一个地址指向常量池中的字符串常量。
回复 使用道具 举报
刚学习了,String类比较特殊,new在内存中开辟了一个空间,一个对象,“abcdef”本身是一个对象。所以是两个对象。
回复 使用道具 举报
不就只创建了一个对象吗,哪来的两个对象。
回复 使用道具 举报
字符串是特殊的引用数据类型,abcdef存储在常量池中,也作为一个常量对象,String s也是一个对象
回复 使用道具 举报
值是一样的,new 出的指向常量池中的字符串,地址不一样,所以是2个
回复 使用道具 举报
KyluS 中级黑马 2015-10-28 21:30:23
19#
堆内存跟栈内存各一个吧
回复 使用道具 举报
常量池的概念我还不太清楚,总之先记下了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马