黑马程序员技术交流社区
标题:
String s=new String("abc")和 String s="abc";
[打印本页]
作者:
奋斗41280
时间:
2016-9-16 21:48
标题:
String s=new String("abc")和 String s="abc";
String s=new String("abc");
String s1="abc";
重新equals方法后
syso(s.equals(s1))-------->true;
按说new的有两个地址值, ==时 比较地址值为什么不拿new里面的那个abc的地址值和s1的比较?
这块理解的不透彻,求大神解惑.......
作者:
yigezhifu
时间:
2016-9-16 21:54
equals不是比较的地址值,是比较的两个String的具体值,也就是两个都是"abc"的比较,肯定是true了;如果是比较s==s1,那肯定是false了
作者:
java程序猿
时间:
2016-9-16 21:56
楼上说的对, String重写了Object类中的equals方法,比较的是字符串常量
作者:
kangnam
时间:
2016-9-16 21:57
因为你重写了equals,重写了就是比较内容;没重写就是比较地址值
作者:
EdwardWuang
时间:
2016-9-16 21:57
楼上说的对, String重写了Object类中的equals方法,比较的是字符串常量
作者:
NewsmallWhite
时间:
2016-9-16 22:00
这么说的话,说明你对"=="与equals()方法还是了解的,
首先,说说equals()方法,
一个类如果没有重写Object类的equals()方法的话,比较的也是地址值,如果重写了,
比较的就是内容,String类重写了equals()方法,所以比较的是内容。
再说,“==”,是比较运算符,比较的是地址值;
String s1 = new String("abc"):创建了两个对象,一个在堆内存中,另一个在常量池中
String s2 = "abc";创建了一个对象,对象的地址值存放在常量池中
s1==s2比较的是s1在对内存的地址值与s2在常量池中的地址值
作者:
Fate_stay
时间:
2016-9-16 22:17
String重写了Object类中的equals方法,比较的是字符串常量
作者:
YSL450125
时间:
2016-9-16 22:27
如题"abc" 对象是在方法区中的常量池中的,new出的String对象实在堆内存中创建的,地址值肯定是不同的,new出的String对象是"abc"的副本
作者:
chenyihan
时间:
2016-9-17 10:26
String 是引用数据类型,equa比较引用数据类型的时候比较的具体值.肯定相等
作者:
minhang0902
时间:
2016-9-17 11:06
因为s引用的是new出来的对象的地址值
作者:
奋斗41280
时间:
2016-9-17 20:57
NewsmallWhite 发表于 2016-9-16 22:00
这么说的话,说明你对"=="与equals()方法还是了解的,
首先,说说equals()方法,
一个类如果没有重 ...
==的情况下,
String s1 = new String("abc"):创建了两个对象,一个在堆内存中,另一个在常量池中----->按说有两个地址值 值1(new)和值2(abc)
String s2 = "abc";创建了一个对象,对象的地址值存放在常量池中----->有一个地址值(abc)值3;
那么值2和值3不是一样的指向abc吗? 为什么不比较2和3?
作者:
Fate_stay
时间:
2016-9-17 21:49
大家都是引用类型,地址肯定不一样,所以比较地址没有意义,比较内容才有意义,所以要重写equeals方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2