黑马程序员技术交流社区

标题: elquals [打印本页]

作者: 马新乐    时间: 2011-12-26 02:51
标题: elquals
本帖最后由 马新乐 于 2011-12-27 23:18 编辑

String类复写了obj类中的elquals方法,可是怎样去比较呢?
作者: 张冬冬    时间: 2011-12-26 03:12
String重写了object中的equals方法,object默认比较的是==,也就是地址值,String比较的是内容
作者: 杨丹丹    时间: 2011-12-26 06:35


在Java中,每一个对象都有一个地址空间,在这空间保存着这个对象的值。

String的equals是对比他们的字符和字符序列是否是相同

Object对比的是引用的地址是否相同!

用下面的例子来说明。
String str1 = "aaa";
String str2 = "aaa";
String str3 = new String("aaa");
str1与str2使用的是同一地址空间,因为String使用的是对象池,对象池概念你再去百度一下。
而str3是new出来的,就相当于开辟了新的空间,地址也就跟str1,str2不一样的。
所以,下面输出的结果为:
System.out.println(str1.equals(str2));   --true,地址一样,值也一样
System.out.println(str1.equals(str3);     --true,地址不一样,但是值一样
System.out.println(str1 == str2);           --true,地址一样,值也一样
System.out.println(str1 == str3);           --false,地址不一样,值一样,还是false

作者: 曾运    时间: 2011-12-26 08:33
重写Object类中的equals方法遵循:

未命名.jpg (20.74 KB, 下载次数: 41)

equals

equals

作者: 王胜利    时间: 2011-12-26 08:39

String重写了object中的equals方法,object默认比较的是==,也就是地址值,String比较的是内容
class StringDemo
{
public static void main(string args[])
{
string s1='abc'
//s1是一个类类型变量,'abc'是一个对象,字符串最大的

特点:一旦被初始化,就不可以被改变。

string s2=new string('abc');

system.out.println(s1==s2);            false
system.out.println(s1.equals(s2));    true
//string类复写了object类中equals方法,该方法用于判断字符串是否相同

s1和s2有什么区别?
s1在内存中有一个对象
s2在内存中有两个对象


作者: 王胜利    时间: 2011-12-26 08:39

String重写了object中的equals方法,object默认比较的是==,也就是地址值,String比较的是内容
class StringDemo
{
public static void main(string args[])
{
string s1='abc'
//s1是一个类类型变量,'abc'是一个对象,字符串最大的

特点:一旦被初始化,就不可以被改变。

string s2=new string('abc');

system.out.println(s1==s2);            false
system.out.println(s1.equals(s2));    true
//string类复写了object类中equals方法,该方法用于判断字符串是否相同

s1和s2有什么区别?
s1在内存中有一个对象
s2在内存中有两个对象


作者: 常兆鹏    时间: 2011-12-26 08:45
Object中默认的equals方法是比较在内存中的地址值是否相同,String重写了equals方法,使其能够比较字符和字符序列是否相同,是Object中equals功能的扩展。
作者: 颜宗茂    时间: 2011-12-26 20:47
String的equals方法应该是先比较字符串中的字符的二进制的值吧,从第一个字符开始,如果相等再比较第二个,以此类推。
作者: 刘小峰    时间: 2011-12-26 21:07
String 中 的 equals比较低是俩个字符串中的内容  ,  而obj中的equals方法比较的是俩个引用的地址
作者: 黄战胜    时间: 2011-12-27 17:48
equals方法比较两个对象是否相等时,其实比较的是这两个对象的内存分配首地址。如果两个对象具有相同的内存首地址,那个这两个对象其实是一个。如果不同的话,就是两个。一般情况下在,只要建立了一个对象,那么,内存就会分配一个内存区域出来。理解起来很简单,对象是类的实例化,既然实例了,就是个个体,就要有空间。但是在Java设计的时候呢,为了节省内存空间。会把一些简单而又常用的对象默认只分配一次空间,比如常数,字符,字符串。
作者: 杨玉揆    时间: 2011-12-27 20:44
其实String方法还实现了Comparable这个接口,具体的话去看毕老师的视频

作者: 马新乐    时间: 2011-12-27 23:16
杨玉揆 发表于 2011-12-27 20:44
其实String方法还实现了Comparable这个接口,具体的话去看毕老师的视频

恩,已经看过了。知道原理了,谢谢老师给分!
作者: 杨玉揆    时间: 2011-12-28 10:25
马新乐 发表于 2011-12-27 23:16
恩,已经看过了。知道原理了,谢谢老师给分!

我不是老师 呵呵只是版主而已




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