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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 610757257 中级黑马   /  2014-12-27 21:22  /  837 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Person
  2. {
  3.         private int age;
  4.         Person(int age )
  5.         {}
  6.         public boolean compare(Person p)
  7.         {
  8.                 return this.age==p.age;
  9.         }
  10. }
  11. class PersonDemo1
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                 Person p1=new Person(20);
  16.                 Person p2=new Person(25);
  17.                 boolean b=p1.compare(p2);
  18.                 System.out.println(b);
复制代码


为什么结果是true而不是false????
不是20==25吗?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

11 个回复

倒序浏览
不是20==25,而是0==0
在提供有参构造方法中,对于接收到的参数并没有进行显示的赋值操作,所以字段取的依然是其默认值。
修改之后的代码如下:
class Person
{
        private int age;
        Person(int age )
        {   
                this.age=age;
        }
        public boolean compare(Person p)
        {
                return this.age==p.age;
        }
       
}
class test1
{
        public static void main(String[] args)
        {
                Person p1=new Person(20);
                Person p2=new Person(25);
                boolean b=p1.compare(p2);
                System.out.println(b);
        }
}
这样的输出结果就是:false

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
{:3_46:}没赋值进去楼上正解
回复 使用道具 举报
Person类中的有参构造函数没有给成员变量赋值,空等于空,所以是true
回复 使用道具 举报
代码写漏了
回复 使用道具 举报
2L正解..
回复 使用道具 举报
了解了。
回复 使用道具 举报
cz萑 中级黑马 2014-12-28 21:58:34
8#
你的对象的构造方法没有给成员变量赋值,所以都是0
回复 使用道具 举报
cz萑 中级黑马 2014-12-28 21:59:49
9#
你的对象的构造方法没有给成员变量赋值,所以都是0
回复 使用道具 举报
2L完全正解,楼主虽然提供了带参构造,但是构造里面没有写赋值操作,所以就相当于提供了无参的构造的结局,只提供初始化。那么无论你传什么参数进去都是得到默认的值0,怎么比都是true
回复 使用道具 举报
FINE 中级黑马 2014-12-28 22:15:41
11#
构造函数Person里应该返回一个age值
回复 使用道具 举报
猛的一看我还以为是程序问题,仔细一看,原来你构造方法都还没赋值.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马