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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卢乾荣 中级黑马   /  2015-3-25 21:10  /  916 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习的时候,有个小问题,Object类型调用equals方法时,比较两个对象的内存地址值相不相等,而String类型比较的是字符内容是否相同,但是我对String这里有个想法,求大牛解答?
String s="abs";这里的“abs”是不是相当于堆内存中的一个对象它有一块独立的地址,那么我又初始化一个引用型变量,String ss="abs",那么这个ss是不是也指向了上一个的内存地址呢?还是说下一个ss所指向的是一个新的对象。(注意是String 类型)
强调确实概念混淆了,不是恶意灌水,求大牛解答。

9 个回复

倒序浏览
指向一个新的地址值
回复 使用道具 举报
哦,那看来是我理解错了,谢谢啊:)
回复 使用道具 举报
每new一个新的引用类型对象,就会在堆内存空间开辟一块新的内存空间。object类中的equals比较两个对象是比较他们的内存地址值,所以比较两个不同的对象时,结果一定是false,但是string类中继承并重写了equals的内容,重写的内容比较的是String对象的字符串的内容,调用string类的equals方法后可以比较字符串是否相等。
回复 使用道具 举报 1 0
s和ss指向不同对象,不过String在常量池里,所以"abs"是指向同一个地址。也就是说s和ss指向地址所在的内容是指向"abs"的地址
回复 使用道具 举报
哥们你是说“abs”是在常量池里是吗,他俩都指向了常量池中的“abs”地址了是吗
回复 使用道具 举报
Grady 中级黑马 2015-3-25 21:49:13
7#
每新定义一个String 类就会分配一个新的空间。而String的字符串比较值是因为String把equals方法重写了
回复 使用道具 举报
s和ss只是两个对象。 我告诉你一个方法:内存地址永远是跟着右边 "abs"。如果内存上有一样的"abs"则不需要。意思就是两个对象都对应一个内存地址。
回复 使用道具 举报
明白了,谢谢:)
回复 使用道具 举报
本帖最后由 fankaiqiangnj 于 2015-3-26 21:44 编辑

还没学到常量池

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马