黑马程序员技术交流社区
标题:
自己眼中的equals和==的区别
[打印本页]
作者:
王震阳老师
时间:
2012-10-1 11:55
提示:
该帖被管理员或版主屏蔽
作者:
王震阳老师
时间:
2012-10-1 11:55
C:\Documents and Settings\Administrator\桌面\javacode>javac T
C:\Documents and Settings\Administrator\桌面\javacode>java Te
s1.equals(s2)true
false
C:\Documents and Settings\Administrator\桌面\javacode>
作者:
王震阳老师
时间:
2012-10-1 11:57
,怎样将图片放上来呀,怎么搞不好呢
作者:
李玉生
时间:
2012-10-1 12:41
看下面例子:
/**
*举例说明equals与==
*/
public class TestEqual
{
public static void main(String[] args)
{
int it = 65;
float fl = 65.0f;
//将输出true
System.out.println("65和65.0f是否相等?" + (it == fl));
char ch = 'A';
//将输出true
System.out.println("65和'A'是否相等?" + (it == ch));
String str1 = new String("hello");
String str2 = new String("hello");
//将输出false
System.out.println("str1和str2是否相等?" + (str1 == str2));
//将输出true
System.out.println("str1是否equals str2?" + (str1.equals(str2)));
}
}
作者:
王震阳老师
时间:
2012-10-1 12:52
李玉生 发表于 2012-10-1 12:41
看下面例子:
/**
*举例说明equals与==
首先感谢您的回复,您的意思是说明:==用于比较数值型数据时(当然包括char类型的)时候,==比较的不是地址而是数值是否相等吗,感谢您的补充。
作者:
李玉生
时间:
2012-10-1 13:02
/**
* 深入了解equals
*/
//定义一个Person类
class Person
{
private String name;
private String idStr;
public Person(){}
public Person(String name , String idStr)
{
this.name = name;
this.idStr = idStr;
}
//下面是name和idStr的setter和getter方法。
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setIdStr(String idStr)
{
this.idStr = idStr;
}
public String getIdStr()
{
return this.idStr;
}
//重写equals方法,提供自定义的相等标准
public boolean equals(Object obj)
{
//待比较的两个对象是同一个对象,直接返回true
if(this == obj)
{
return true;
}
//只有当obj是Person对象,这里用到了反射的基础知识
if (obj != null && obj.getClass() == Person.class)
{
Person personObj = (Person)obj;
//并且当前对象的idStr与obj对象的idStr相等才可判断两个对象相等
if (this.getIdStr().equals(personObj.getIdStr()))
{
return true;
}
}
return false;
}
}
/*
由于instanceof运算符的特殊性,当前面对象是后面类的实例或其子类的实例都将返回true,
所以实际上重写equals()方法时判断2个对象是否为同一个类的实例时使用instanceof是有问题的,
如果比较的两个对象是同一个对象,则可以直接返回true即可。
public boolean equals(Object obj)
{
//只有当obj是Person对象
if (obj != null && obj instanceof Person)
{
Person personObj = (Person)obj;
//并且当前对象的idStr与obj对象的idStr相等才可判断两个对象相等
if (this.getIdStr().equals(personObj.getIdStr()))
{
return true;
}
}
return false;
}
*/
public class OverrideEqualsRight
{
public static void main(String[] args)
{
Person p1 = new Person("毛泽东" , "123434");
Person p2 = new Person("毛主席" , "123434");
Person p3 = new Person("毛小三" , "9993343");
//p1和p2的idStr相等,所以输出true
System.out.println("p1和p2是否相等?" + p1.equals(p2));
//p2和p3的idStr不相等,所以输出false
System.out.println("p2和p3是否相等?" + p2.equals(p3));
}
}
作者:
李玉生
时间:
2012-10-1 13:05
兄弟,加油,相信你会很快学会的
作者:
恒士利平
时间:
2012-10-1 13:07
楼主的说法存在一定的错误,显然有些说法是不科学的。楼主所说的情况只能指的的当==和equals都比较的是引用数据类型时才成立的,而对于基本数据类型,==和equals是不能这样被你描述的。
作者:
王震阳老师
时间:
2012-10-1 13:12
李玉生 发表于 2012-10-1 13:05
兄弟,加油,相信你会很快学会的
自己之前对==和equals感觉很难区分,后来知道点他们两个的关系,误以为自己已经掌握了==和equals的使用方法和区别,但是您看到您的回复,自己感觉自己的认识水平还差的很,自己还要虔诚的学习。谢谢。
作者:
李玉生
时间:
2012-10-1 15:19
你的理解很好,我只是把你的理解实例化了而已{:soso_e113:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2