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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许飞翔 中级黑马   /  2012-3-17 10:13  /  2862 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

11 个回复

倒序浏览
==会自动判断
回复 使用道具 举报
张晨 发表于 2012-3-17 10:16
==会自动判断

我传的age值分别是20和30,按理来说应该是flase才对啊
回复 使用道具 举报
没有给Person里的age赋值  对象创建时age默认的值是0 所以相等啊
打印出来看就知道了

楼主的意思应该是在构造方法里加上 this.age=age 之后再比较吧
回复 使用道具 举报
本帖最后由 冯建鹏 于 2012-3-17 10:29 编辑

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

        {
              this.age=age;


       }

这样才能把你附进去的值传递给age。这样 比较就是false了
      
                      
回复 使用道具 举报
foxpeter 发表于 2012-3-17 10:22
没有给Person里的age赋值  对象创建时age默认的值是0 所以相等啊
打印出来看就知道了

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

回复 使用道具 举报
冯林 中级黑马 2012-3-17 12:20:24
8#
Person (int age)
        {
        }
什么都没做{:soso_e120:}
Person (int age)

        {
              this.age=age;


       }{:soso_e112:}
回复 使用道具 举报
魏明明 黑马帝 2012-3-17 12:21:32
9#

你得意图是想通过构造方法  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);  赋值
回复 使用道具 举报
Person (int age)   
{
this.age = age; //你这里面为空,所以比较的是两个对象age的默认值,都是0,当然相等了
   }
回复 使用道具 举报
ryan 初级黑马 2012-3-17 17:44:15
11#
既然你用private封装了age属性,所以必须要用setter方法赋值,不然他们都是默认值0,所以返回的是true,如果用了setter方法赋值,则返回的是false,
回复 使用道具 举报
ryan 初级黑马 2012-3-17 17:45:00
12#
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);
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马