有时会遇到this作为返回值的情况,那么此时返回的到底是什么呢?

返回的是调用this所处方法的那个对象的引用,读起来有点绕口哈,有没有想起小学语文分析句子成份的试题,哈哈。
一点点分析的话,主干是“返回的是引用”;
什么引用呢?“那个对象的引用”;
哪个对象呢?“调用方法的那个对象”;
调用的哪个方法呢?“调用的是this所位于的方法”;这样就清楚了。
再总结一下就是,this作为返回值时,返回的是调用某方法的对象的引用,这个方法正是包含“return this;”这行命令的那个方法;更简单点说,就是谁调用返回的就是谁。
为了更清楚、直观的理解问题,下面以简单的例子说明。
包human中定义了Person类,代码如下:
package human;
public class Person {
String name;
int age;
public Person() {
}
public Person(String n, String g) {
name = n;
gender = g;
}
//test:this作返回值
Person reThis1() {
Person per = new Person("lu","female");
System.out.println("reThis1 per:" + per.name);
return this;
}
Person reThis2() {
Person per = reThis1();
System.out.println("reThis2 per:" + per.name);
return this;
}
Person reThis3() {
name = "ma";
return this;
}
static void equRefer(Person per1, Person per2) {
if(per1 == per2)
System.out.println("per1指向的对象没有改变,仍与per2指向同一个对象");
else
System.out.println("per1指向的对象已改变,与per2指向不同的对象");
System.out.println("per1:" + per1.name);
System.out.println("per2:" + per2.name);
}
public static void main(String[] args) {
Person per1 = new Person("liu","female");
Person per2 = per1;
per1 = per1.reThis1();
Person.equRefer(per1, per2);
per1 = per1.reThis2();
Person.equRefer(per1, per2);
System.out.println("调用reThis3之前,per1.name=" + per1.name);
per1 = per1.reThis3();
System.out.println("调用reThis3之后,per1.name=" + per1.name);
}
}