黑马程序员技术交流社区

标题: 为什么返回的是true,有点不明白。 [打印本页]

作者: 许飞翔    时间: 2012-3-17 10:13
标题: 为什么返回的是true,有点不明白。
  1. class Person
  2. {
  3.         private int age;
  4.         Person (int age)
  5.         {
  6.         }
  7.         public boolean compare(Person p)
  8.         {
  9.                 return this.age==p.age;
  10.         }
  11. }
  12. class  Test
  13. {

  14.         public static void main(String[] args)
  15.         {
  16.                 Person p=new Person(20);
  17.                 Person p1=new Person(30);
  18.                 boolean b=p.compare(p1);
  19.                 System.out.println(b);
  20.         }
  21. }
复制代码

作者: 张晨    时间: 2012-3-17 10:16
==会自动判断
作者: 许飞翔    时间: 2012-3-17 10:18
张晨 发表于 2012-3-17 10:16
==会自动判断

我传的age值分别是20和30,按理来说应该是flase才对啊
作者: foxpeter    时间: 2012-3-17 10:22
没有给Person里的age赋值  对象创建时age默认的值是0 所以相等啊
打印出来看就知道了

楼主的意思应该是在构造方法里加上 this.age=age 之后再比较吧
作者: 冯建鹏    时间: 2012-3-17 10:28
本帖最后由 冯建鹏 于 2012-3-17 10:29 编辑

问题出在构造函数上面 你构造函数里面什么都没写,虽然你传递参数了但是他们都没赋值给age ,等于他们的年龄都没赋值,都是初始值0,构造函数应该这样写
Person (int age)

        {
              this.age=age;


       }

这样才能把你附进去的值传递给age。这样 比较就是false了
      
                      

作者: 许飞翔    时间: 2012-3-17 10:29
foxpeter 发表于 2012-3-17 10:22
没有给Person里的age赋值  对象创建时age默认的值是0 所以相等啊
打印出来看就知道了

谢谢了。。。。。。
作者: 张润政    时间: 2012-3-17 10:29
Person (int age)    {  this.age = age;   }
你需要在构造函数中加上这条语句,这句话是初始化对象的过程,你new来的对象确实具有了age这个属性,但是在你进行初始化的时候你传入了一个age,但是在函数体内你并没有对这个age进行操作。也就是没有把这个具体的值付给你的对象。
你new出来的两个对象同用了一个构造器,但却都没有完成给age赋值。也就是你的20,30并没有赋值给具体的对象,所以他们比较的时候都是null。都是相同的。
你加上这条语句之后,你的对象才有了具体的值啊。所以就返回了false


作者: 冯林    时间: 2012-3-17 12:20
Person (int age)
        {
        }
什么都没做{:soso_e120:}
Person (int age)

        {
              this.age=age;


       }{:soso_e112:}
作者: 魏明明    时间: 2012-3-17 12:21

你得意图是想通过构造方法  Person (int age)
        {
            this.age=age;
        }给私有成员变量age赋值 在通过compare(Person p)  比较 如果说结果 与你预期的不一样
你就该找到底哪里错了,就往上找呗,看compare(Person p)  有没有错,语句很简单没有错,你看Person (int age)  一个就是空的 什么都没有 所以要加上赋值语句
才可以实现    Person p=new Person(20);
                Person p1=new Person(30);  赋值

作者: 黑马肖凯骏    时间: 2012-3-17 12:23
Person (int age)   
{
this.age = age; //你这里面为空,所以比较的是两个对象age的默认值,都是0,当然相等了
   }

作者: ryan    时间: 2012-3-17 17:44
既然你用private封装了age属性,所以必须要用setter方法赋值,不然他们都是默认值0,所以返回的是true,如果用了setter方法赋值,则返回的是false,
作者: ryan    时间: 2012-3-17 17:45
class Person
{
        private int age;
        Person (int age)
        {
                        this.setAge(age);
        }
                public void setAge(int age){
                        this.age=age;
                }
               
        public boolean compare(Person p)
        {
                return this.age==p.age;
        }
}
public class  Test
{

        public static void main(String[] args)
        {
                Person p=new Person(20);
                Person p1=new Person(30);
                boolean b=p.compare(p1);
                System.out.println(b);
        }
}




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