A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黎健东 中级黑马   /  2012-7-24 21:23  /  5324 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test2 {
  2. public static void main(String[] args) {
  3. Person p1 = new Person(10);
  4. Person p2 = new Person(10);


  5. }

  6. class Person{
  7.      int age;
  8.      Person(int age){
  9.      this.age = age;
  10.      }
  11. }

  12. }
复制代码
如何添加某种条件与判断,使得他们的判断结果为true,但是更改了某个条件后,他们的判断结果为false
说明原因,为什么

10 个回复

倒序浏览
01.public class Test2 {

02.public static void main(String[] args) {

03.Person p1 = new Person(10);

04.Person p2 = new Person(10);

05.//在这里添加代码

06.System.out.println(p1.equals(p2));    //结果打印true   equals()方法比较是两个对象的实际内容是否相等,如果相等返回true,不等返回false

07..System.out.println(p1==p2);           //结果打印false   ==比较的是操作数的值之间的关系,这里比较的是对象的引用是否相等。如果相等返回true,不等返回false



08.}

回复 使用道具 举报
本帖最后由 杜佳瑞 于 2012-7-24 23:37 编辑

public class Test2
{
      public static void main(String[] args)
      {
           Person p1 = new Person(10);
           Person p2 = new Person(10);
           System.out.println(p1.age==p2.age);// 结果是true,如果(p1=p2)结果是false,因为p1和p2是两个对象的地址,
                                                                     不可能相等,而p1.age和p2.age是不同地址上得数据,都是10.

}
class Person
{        
          int age;
          Person(int age)
         {
              this.age = age;
         }
}

回复 使用道具 举报
public class Test2 {
        public static void main(String[] args) {
                bbb b1=new bbb(10);
                bbb b2=new bbb(10);
                b1=b2;   把b2的值赋给b1,比较结果为true。如果不赋值,则为false
                System.out.println(b1.equals(b2));
        }
}
回复 使用道具 举报
孙建飞 发表于 2012-7-24 21:48
01.public class Test2 {

02.public static void main(String[] args) {

赞! 这个想法比较吊
回复 使用道具 举报
class  ArrayDemo
{
public static void main(String[] args)
{
   Person p1 = new Person(10);
   Person p2 = new Person(10);
   System.out.println(p1.equals(p2));
   //这里重写了equals方法,两个对象比较的是元素的值是否相等,所以为true
   System.out.println(p1==p2);
   //这里比较的是两个对象的地址值,因为都是new的对象,所以分配的空间不一样,自然地址值就不一样了,就是false
}
}
class Person {
int age;
Person(int age) {
  this.age = age;
}
public int getAge()
{
  return age;
}
public boolean equals(Object obj)
{
  Person p=(Person)obj;
  return this.age == p.age;
}
}
回复 使用道具 举报
打印结果:

V@0[1D$8L5EJO[][G4XAC8S.jpg (2.22 KB, 下载次数: 66)

V@0[1D$8L5EJO[][G4XAC8S.jpg
回复 使用道具 举报
楼主的代码有误呀!Person类不能放在Test2类中,因为Test2类里面是要实例化Person类的。这个基本常识我不讲了啊,楼主想了解如何判断两个对象是否相等,是不是想了解“==”和equals的用法呢?把你的代码稍微修改下。
class Person {
      int age;
      Person(int age) {
            this.age = age;
      }
}
public class Demo3 {
     public static void main(String[] args) {
                Person p1 = new Person(10);
                Person p2 = new Person(10);
                p1 = p2;  
                 System.out.println(p1==p2);
                 System.out.println(p1.equals(p2));
    }
}
上面的代码执行结果是:
true
true
----------------------------
对于非字符串变量来说,"=="和"equals"方法的作用是相同的,都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。在这里因为p1=p2语句,p1的引用指向了p2,所以两个引用变量指向了同一个对象,所以就都是true了!
如果删除了语句:p1 = p2;代码执行结果是:
false
false
------------------------------
因为p1和p2分别实例化,开辟了两个不同的空间,其首地址也不一样,指向当然也就不一样,所以结果就都是false了。



评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.用==判断的是两个引用变量的值是否相等,应用变量只是对对象的引用
2.要想判断两个对象的内容是否相等,需要重写hashCode和equals方法

回复 使用道具 举报
  1. public class Test2 {
  2. public static void main(String[] args) {
  3. Person p1 = new Person(10);
  4. Person p2 = new Person(10);
  5. System.out.println(p1.equals(p2));//false   比较的是内容  内容相同时  为true
  6. System.out.println(p1==p2);//false   比较的是地址  当其存放的地址相同时  即为true;
  7. p1=p2;
  8. System.out.println(p1.equals(p2));//true
  9. System.out.println(p1==p2);//true

  10. }
  11. class Person{
  12. private int age;
  13. Person(int age){
  14. this.age = age;
  15. }
  16. }//原代码有些小问题哦  已改正
复制代码

图片1.png (151.78 KB, 下载次数: 63)

图片1.png
回复 使用道具 举报
朱云坤 发表于 2012-7-25 04:47

上面贴错图了 {:soso_e133:}

1.png (1.05 MB, 下载次数: 69)

1.png

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
03.Person p1 = new Person(10);

04.Person p2 = new Person(10);
这个new了p1和p2两个对象,所以地址值不同,则p1==p2的结果是false;
equals()方法,所有类都继承这个方法,所以在没有从写的情况下也是比较对象的地址值。一般情况下可以重写,以判断两对象的内容是否相等。若重写了;
则:p1.equal(p2)的结果是true;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马