黑马程序员技术交流社区

标题: 请教一个this应用 [打印本页]

作者: 610757257    时间: 2014-12-27 21:22
标题: 请教一个this应用
  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吗?


作者: outsider1020    时间: 2014-12-27 21:48
不是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
作者: 诺诺    时间: 2014-12-27 22:40
{:3_46:}没赋值进去楼上正解
作者: Honelyboy    时间: 2014-12-27 22:52
Person类中的有参构造函数没有给成员变量赋值,空等于空,所以是true
作者: 青衫禅客    时间: 2014-12-28 01:55
代码写漏了
作者: 李增宽    时间: 2014-12-28 20:45
2L正解..
作者: 飘渺之旅    时间: 2014-12-28 21:31
了解了。
作者: cz萑    时间: 2014-12-28 21:58
你的对象的构造方法没有给成员变量赋值,所以都是0
作者: cz萑    时间: 2014-12-28 21:59
你的对象的构造方法没有给成员变量赋值,所以都是0
作者: lnscore    时间: 2014-12-28 22:05
2L完全正解,楼主虽然提供了带参构造,但是构造里面没有写赋值操作,所以就相当于提供了无参的构造的结局,只提供初始化。那么无论你传什么参数进去都是得到默认的值0,怎么比都是true
作者: FINE    时间: 2014-12-28 22:15
构造函数Person里应该返回一个age值
作者: qowoeo7538    时间: 2014-12-28 22:24
猛的一看我还以为是程序问题,仔细一看,原来你构造方法都还没赋值.




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