public class Chapter5_test2 { /**
 * @param args
 */

public static void main(String[] args) {
Apple a=new Apple();
Person p=new Person();
p.eat(a.getPeeled());//1@@
p.eat(a);//2@@
// TODO Auto-generated method stub }}
class Person{
public void eat(Apple apple){
Apple peeled=apple.getPeeled();
System.out.println("Yunm");
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this);

}
}
class Peeler{
static Apple peel(Apple apple){
return apple;
}

}
输出结果是一样的1和2;
问题是注释1和2有什么区别,我觉得new Apple()的时候并没有调用getPeelde()方法 返回Apple对象啊。。为什么呢 

解决方案 »

  1.   

    注释1是取出了对象的一个值设置给Person,注释2是把整个对象设置给了Person
      

  2.   

    p.eat(a.getPeeled());//1@@ 这苹果削了两次
    p.eat(a);//2@@ 这苹果削了一次
    打印的结果都是调用了Person中的eat()方法造成的。
      

  3.   

    p.eat(a.getPeeled());//1@@ 把Apple类中的方法作为eat方法的实参p.eat(a);//2@@ 把Apple类的引用作为eat方法的实参
      

  4.   

    p.eat(a.getPeeled());//1@@
    p.eat(a);//2@@
    对上面的语句这样是否好理解一些:
    Apple b;
    b=a.getPeeled();p.eat(b);
    p.eat(a);
     a, b 是一个对象,只是相当a于转了一圈。