黑马程序员技术交流社区

标题: 关于equals的问题 [打印本页]

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

作者: 福娃51zx    时间: 2015-3-25 21:20
指向一个新的地址值
作者: 卢乾荣    时间: 2015-3-25 21:27
哦,那看来是我理解错了,谢谢啊:)
作者: leonard    时间: 2015-3-25 21:35
每new一个新的引用类型对象,就会在堆内存空间开辟一块新的内存空间。object类中的equals比较两个对象是比较他们的内存地址值,所以比较两个不同的对象时,结果一定是false,但是string类中继承并重写了equals的内容,重写的内容比较的是String对象的字符串的内容,调用string类的equals方法后可以比较字符串是否相等。
作者: 张耀东    时间: 2015-3-25 21:39
s和ss指向不同对象,不过String在常量池里,所以"abs"是指向同一个地址。也就是说s和ss指向地址所在的内容是指向"abs"的地址
作者: 卢乾荣    时间: 2015-3-25 21:45
哥们你是说“abs”是在常量池里是吗,他俩都指向了常量池中的“abs”地址了是吗
作者: Grady    时间: 2015-3-25 21:49
每新定义一个String 类就会分配一个新的空间。而String的字符串比较值是因为String把equals方法重写了
作者: jiangwenjun    时间: 2015-3-26 10:02
s和ss只是两个对象。 我告诉你一个方法:内存地址永远是跟着右边 "abs"。如果内存上有一样的"abs"则不需要。意思就是两个对象都对应一个内存地址。
作者: 卢乾荣    时间: 2015-3-26 18:42
明白了,谢谢:)
作者: fankaiqiangnj    时间: 2015-3-26 21:42
本帖最后由 fankaiqiangnj 于 2015-3-26 21:44 编辑

还没学到常量池






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2