黑马程序员技术交流社区

标题: this问题求解。。谢谢 [打印本页]

作者: 張帅    时间: 2013-9-18 08:31
标题: this问题求解。。谢谢
本帖最后由 張帅 于 2013-9-20 11:17 编辑

class Person
{
        private String name;
        private int age;
        Person(int age)
        {
                this.age = age;//对年龄进行初始化
        }

public boolean compare(Person p)
{
   return this.age==p.age;//问题: 此处的this.age 是 p1的age还是p2的age啊?。。是不是谁在调用这个比较对象谁就是this(即p1是),还是this是传入进来的p2的年龄,也就是说this是本对象的p2的age与调用本对象的p1的age作比较??谢谢
}
}

class TestDemo
{
        public static void main(String[] args)
        {
                Person p1 = new Person(21);
                Person p2= new Person(22);
                boolean b = p1.compare(p2);
                System.out.println(b);
        }
}


作者: 麦子609    时间: 2013-9-18 08:37
谁调用这个方法,this就是谁
作者: 雪龙    时间: 2013-9-18 08:42
你要使用person类中的方法就要创建对象吧,那个对象调用这个方法。this便指那个对象
作者: 369833818    时间: 2013-9-18 08:46
这里的this是指对象调用的age,p.age是指被比较对象的age

作者: zy888802    时间: 2013-9-18 09:05
P1调用这个函数时,p1就是this
p2调用函数时,p2就是this
哪个对象调用这个函数,this就代表哪个。
作者: kmter    时间: 2013-9-18 09:25
这里的this指的是调用compare(Person p)方法对象,p为形参指的是该方法传入的Person对象。
作者: 狼人→浪人    时间: 2013-9-18 09:53
在你compare方法的基础上加上一句打印代码,如下:

public boolean compare(Person p)
{
/*加上下面这段代码,运行!所以P1调用此方法,this就是P1;P2调用此方法,this就是P2.*/
System.out.println("this(当前对象:即这个方法的调用者)的年龄:"+this.age+"\t对象p年龄:"+p.age);
   return this.age==p.age;//此处的this表示 调用compare方法的person对象!
}
问题解决!


作者: 陈国柱    时间: 2013-9-18 10:57
this可以看成调用其所属方法的对象的另外一个称呼。就好像张三(对象)使用了这把尺子(方法),也可说为这个人(this)使用了这把尺子(方法)。
Person p1 = new Person(21);//p1新建对象后,传入了参数,调用了Person这个对象的构造方法                      Person(int age){},this.age=age,this可以看成是一个调用对象p1的另外一个称呼,this.age其实是调用对象p1在调用其年龄属性,而等号右面的age,就是p1新建对象时传入的参数。
Person p2= new Person(22);//p2也做了同样的事。
boolean b = p1.compare(p2);//在这里,等号的右边,p1然后一点,那么就是p1在调用自己新建对象后的compare方法,而它的这个方法需要传一个对象进去,所以p2就是要传进去的实际参数,p = p2,而p1是调用方法的对象,所以这个对象代表了this,this = p1, return后面的语句就是两个对象分别调用自己的年龄属性然后进行比较。
作者: 杨增坤    时间: 2013-9-18 11:14
楼主,你好!
如果您的问题解决了,请把您问题的未解决更改为已解决
谢谢合作!





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