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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 琳以沫   /  2014-7-14 09:33  /  2301 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个是视频第十三天的内容
回复 使用道具 举报
字符串定义出来后保存在堆内存中,而名字就是aa保存在栈内存中,aa中保存的的是字符串的索引也就是字符串在堆内存中的地址值,而你上面的两个定义方式是导致他们==是false的主要原因,字符串本身就是一个对像,你第一种定义方式只有一个对像就是“abc”而你的第二个定义方式有两个对象new一个“abc”又是一个,详细内容你可以看看第十三天的第一个视频
回复 使用道具 举报
本帖最后由 帮帮 于 2014-7-18 14:46 编辑

我是借助概念和图来理解的:

栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)

堆:存放所有new出来的对象。

常量池:存放字符串常量和基本类型常量(public static final)。

附上图片解析:


回复 使用道具 举报
这个是对象的创建。简单来说,new 是不管内存中是否已经有相同内容的字符串,直接创建新对象。而==是测试两个类的引用是否指向同一个对象,很明显aa和bb不是同一个对象的,所以返回FALSE。楼主说的内容一样,那是equal,equal才是比较字符串内容的。表达能力不好,不知道有没有说明白
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马