黑马程序员技术交流社区
标题:
赋写equals方法,为什么我怎么看都是false:(
[打印本页]
作者:
徐升2013
时间:
2013-3-12 18:10
标题:
赋写equals方法,为什么我怎么看都是false:(
代码如下:
public class TestOverquals
{
public static void main(String args[])
{
TestPerson1 p11 = new TestPerson1("张三",25);
TestPerson1 p12 = new TestPerson1("张三",25);
System.out.println(p11.equals(p12)?"是同一个人":"不是同一个人");
}
}
class TestPerson1
{
private String name;
private int age;
public TestPerson1(String name ,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object o)
{
boolean temp = true;
TestPerson1 p1 = this;
if(o instanceof TestPerson1)
{
TestPerson1 p2 = (TestPerson1)o;
if(!(p1.name.equals(p2.name)&&p1.age==p2.age)) //这里看不懂,首先equals方法比较的是2个对象,他俩的name属性也可以比较吗?而且这里调
// 用的是没有赋写的object类的equals方法,那么他俩的内存地址值肯定是不同的。应该是false,然后取反 不就是true了么?true了就执行下一条语句,不就是
//否了么。。绕晕了。。。真心迷糊了。。。。
{
temp = false;
}
}
else
{
temp =false;
}
return temp;
}
}
作者:
马甲大王
时间:
2013-3-12 18:21
if(!(p1.name.equals(p2.name)&&p1.age==p2.age))
equals比较的是对象的内容 而==则比较的是对象是否是同一个。
作者:
爪哇攻城狮
时间:
2013-3-12 18:37
关于“equals”和“==”的理解。请看论坛帖子:
http://bbs.itheima.com/thread-40672-1-2.html
希望能帮到你
作者:
熊冠银
时间:
2013-3-12 18:43
name用==比较,下面是我对你代码的修改,和部分注释,希望对你有所帮助
class TestPerson1
{
private String name;
private int age;
public TestPerson1(String name ,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object o)
{
boolean temp = true;
if(o instanceof TestPerson1)
{
TestPerson1 p2 = (TestPerson1)o; //判断如果o属于TestPerson1,强转
if(!(this.name==p2.name&&this.age==p2.age)) //如果p2的两个属性与调用equals方法的对象的属性不等,返回false,否则返回true
{
temp = false;
}
}
else
{
temp =false;
}
return temp;
}
}
复制代码
作者:
谢洋
时间:
2013-3-12 19:37
class TestPerson1
{
private String name;//字符串
private int age;//int型数据
public TestPerson1(String name ,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object o)
{
boolean temp = true;
TestPerson1 p1 = this;
if(o instanceof TestPerson1)
{
TestPerson1 p2 = (TestPerson1)o;
//注意看上面 name和age的定义,这里比较是两个对象的name和age是否相同
if(!(p1.name.equals(p2.name)&&p1.age==p2.age))
//这里看不懂,首先equals方法比较的是2个对象,他俩的name属性也可以比较吗?而且这里调
// 用的是没有赋写的object类的equals方法,那么他俩的内存地址值肯定是不同的。应该是false,然后取反 不就是true了么?true了就执行下一条语句,不就是
//否了么。。绕晕了。。。真心迷糊了。。。。
{
temp = false;
}
}
else
{
temp =false;
}
return temp;
}
}
作者:
沈文杰
时间:
2013-3-12 22:01
if(!(p1.name.equals(p2.name)&&p1.age==p2.age))
/* name的属性是String,故调用的是String的equals方法
* public boolean equals(Object anObject)
* -->如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。比较的是字符串的内容哦
* 所以p1.name.equals(p2.name)返回true,同理p1.age==p2.age也返回true。
* 还有就是if(!(p1.name.equals(p2.name)&&p1.age==p2.age))当中有一个!。所以if当中的语句不执行
*/
{
temp = false;
}
}
复制代码
作者:
曹睿翔
时间:
2013-3-12 22:39
我也来说说,顺便稍稍优化一下代码
public class DuoTaiDemo{
public static void main(String args[]){
TestPerson1 p11 = new TestPerson1("张三",25);
TestPerson1 p12 = new TestPerson1("张三",25);
System.out.println(p11.equals(p12)?"是同一个人":"不是同一个人");
}
}
class TestPerson1
{
private String name;
private int age;
public TestPerson1(String name ,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object o)
{
boolean temp = true;
TestPerson1 p1 = this;
if(o instanceof TestPerson1)
{
TestPerson1 p2 = (TestPerson1)o;
if(!(p1.name.equals(p2.name)&&p1.age==p2.age)) /*
这个嘛。你自己定义的name类型是String,
String本身就重载了Object的equals方法,比较的是String类型的内容,而不是地址引用变量的地址,这个不同于==符号的比较,毕姥爷有讲的
*/
{
temp = false;
}
return temp;//不是同一个人。返回false
}
return false;//需要返回一个false,因为类型不匹配
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2