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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王舜民 中级黑马   /  2012-9-10 14:09  /  2007 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王舜民 于 2012-9-10 15:43 编辑

我这么理解对不?
String str = new String("abc");  String str = "abc";创建几个对象的问题。之前问过,这是我自己理解的图,看看有问题没?
主要看下我画的图

String str = new String("abc");
String str = "abc";
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。

String str1 =new String ("abc");
String str2 =new String ("abc");
System.out.println(str1==str2); // false
用new的方式是生成不同的对象。每一次生成一个。

11 个回复

倒序浏览

回帖奖励 +20

正确,没有错误!
回复 使用道具 举报

回帖奖励 +20

恩,是这样的,楼主只要记住 只要new就是创建一个新的对象,还有常量池的概念,这样的题就没问题了
回复 使用道具 举报
我要给别人解释呢,别把别人教错了。。。
回复 使用道具 举报
本帖最后由 杨习平 于 2012-9-10 15:09 编辑

String str = "abc";
第一个在字符串常量区中定义了一个区域,简单的说创建了一个对象,一个引用。

String str = new String("abc");
第二个在字符常量区里定义了一个区域,在堆里创建了一个区域,在栈里创建了一个引用
简单的举例   如果用    ‘==’   来将这两个对象做比较,得到的结果是false
当然,equal比较忽略引用,只比较内容,会得到true。
------------------------------------------------------------------------------------------
你的推理过程很清晰,自己能理解到这个程度就不错了,我自己都惭愧啊,
向你学习。
回复 使用道具 举报
杨习平 发表于 2012-9-10 15:07
String str = "abc";
第一个在字符串常量区中定义了一个区域,简单的说创建了一个对象,一个引用。

我的图才是推理。
。。。。。
回复 使用道具 举报
孙沛 中级黑马 2012-9-10 15:29:20
7#
哈哈哈,没错
回复 使用道具 举报
你阐述的对,你可以看下我的一篇帖子,也有关于这的
回复 使用道具 举报
谢谢各位,我关帖子了
回复 使用道具 举报
........................
回复 使用道具 举报

回帖奖励 +20

拿分啦!!!
回复 使用道具 举报
挺好.......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马