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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘天骆 注册黑马   /  2012-7-6 21:38  /  2148 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

this表示属性,方法,构造方法。
但是对于下面的代码this,this表示什么呢
public boolean compare(Person per)
{
  if (this == per)  //地址相等
  {
   return true ;
  }
  if (this.name.equals(per.name)&&this.age == per.age)
  {
   return true ;
  }else
  {
   return false ;
  }
}

6 个回复

倒序浏览
你没把类写出来吧!这个this 是本类的对象!
回复 使用道具 举报
首先给楼主讲下呵呵这个都是我的笔记啊
this:看上去,是用于区分局部变量和成员变量同名情况,this为什么可以解决这个问题呢?
this到底代表的是什么呢?
this:就代表本类的对象,到底代表那一个呢?
this代表它所在函数所属对象的引用。简单说:那个对象在调用this所在的函数,
this就代表那个对象。
this的应用,当一定类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
This语句:构造函数中互相调用只能用This语句。
this语句的调用必须用在构造函数第一行第一个语句,以为初始化要先执行。一般函数不可以调用构造函数的。
下面是应用的:
1..
静态的使用中:静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this.
2..
在继承中:
  1, this代表本类对象的引用。
  2,如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this.
   3,当父类中没有空参数的构造函数时,子类必须收购通过super语句的形式来指定要访问父类中的构造函  数,当然:子类的构造函数第一行也可以手动指定this语句
在线程中:
  1,同步函数用的是那一个锁呢?
   函数需要被对象调用,那么函数都有一个所属对象引用,就是this。
所以同步函数使用的锁是this。
  
回复 使用道具 举报
其实this关键字是很容易理解的,下面我举两个例子作对比,可能你就看明白了:
<1>没有使用this的情况:
class A
{
private int aa,bb;//声明两个整形变量
public int returnData(int x,int y) //一个返回整形数的方法
{
aa = x;
bb = y;
return aa + bb;
}
}
<2>使用this的情况
class A
{
private int aa,bb;//声明两个整形变量
public int returnData(int aa,int bb) //一个返回整形数的方法
{
this.aa = aa;//第一个aa是全局变量的aa,后一个aa是参数aa
this.bb = bb;//第一个bb是全局变量的bb,后一个bb是参数bb
return (this.aa + this.bb);
}
}
//////////////////////////////////////////////////
请看下面程序中
MyDate newDay=new MyDate(this);
this是什么作用?
class MyDate{
private int day;
private int month;
private int year; //定义三个成员变量;
public MyDate(int day,int month,int year){
this.day=day;
this.month=month;
this.year=year;
} //构造方法;
public MyDate(MyDate date){
this.day=date.day;
this.month=date.month;
this.year=date.year; //将参数Date类中的成员变量赋给MyDate类;
} //构造方法;
public int getDay(){
return day;
}//方法;
public void setDay(int day){
this.day=day;//参数Day赋给此类中的Ddy;
}
public MyDate addDays(int moreDay){
MyDate newDay=new MyDate(this);
newDay.day=newDay.day+moreDay;
return newDay; //返回整个类;
}
public void print(){
System.out.println("My Date: "+year+"-"+month+"-"+day);
}
}
public class TestMyDate{
public static void main(String args[]){
MyDate myBirth=new MyDate(19,11,1987); //利用构造函数初始化;
MyDate next=myBirth.addDays(7);
//addDays()的返回值是类,将其返回值赋给变量next;
next.print();
}
}
结论:
上面的两个类,本质是相同的,而为什么在第<2>类中使用this关键字呢,注意到第<2>类中的方法returnData(int aa,int bb),形式参数分别为aa和bb,刚好和“private int aa,bb;”这里的变量名是一样的,现在问题来了:在returnData的方法体中如何区别形式参数aa和全局变量aa,两 个 bb也是如此?这就是引入this关键字的用处所在了!this.aa表示的是全局变量的aa,而没有加this的aa表示形式参数的aa,bb也是如此!
建议:
在编程中,过多的使用this关键字不是好方法。这从上面也看得出来,相同的变量名加上this关键字过多时,有时会让人分不清哪个是对哪个。这时可以使用以下方法修改,避免使用this关键字:
<3>
class A
{
private int aa,bb;//声明两个整形变量
public int returnData(int aa1,int bb1)
{
aa = aa1;//在aa后面加上一数字1加以区分,其他以此类推
bb = bb1;
return aa + bb;
}
}
总结:
可以看出,上面的<1>,<2>,<3>都是一样的,但<3>既避免了使用this关键字,又避免了<1>中x和y 这种参数意思不明确的缺点.所有建议使用<3>一样的方法!
回复 使用道具 举报
看看...........................
回复 使用道具 举报
所在函数所属对象饿引用。
回复 使用道具 举报
其实我是来看大家答题的;P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马