this指当前对象 当前对象是哪个? 能给我举个例子吗?
还有中间还有其他代码我指抽出其中的
下面的代码if (this == otherObject) return true;这句话返回的结果应该是什么?otherObject应该指向alice3 这里的this指的是谁?如果是alice1那返回结果是不是false?
if (getClass() != otherObject.getClass())这句话getClass()又指的是谁? otherObject.getClass()又是谁?高手帮帮忙吧 我郁闷死了 能给我详细的解释吗?
public class EqualsTest
{  
   public static void main(String[] args)
   {  
      Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
      Employee alice2 = alice1;
      Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
      Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);      System.out.println("alice1 == alice2: " + (alice1 == alice2));
      System.out.println("alice1 == alice3: " + (alice1 == alice3));
      System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));
      System.out.println("alice1.equals(bob): " + alice1.equals(bob));
      System.out.println("bob.toString(): " + bob);
 public boolean equals(Object otherObject)
   {  
      if (this == otherObject) return true;
      if (otherObject == null) return false;
      if (getClass() != otherObject.getClass())
         return false;      Employee other = (Employee) otherObject;
      return name.equals(other.name)&& salary == other.salary && hireDay.equals(other.hireDay);
   }

解决方案 »

  1.   


    public class User {

    private String userName;
    private String passWord;
    public String getPassWord() {
    return passWord;
    }
    public void setPassWord(String passWord) {
    this.passWord = passWord;
    }
    public String getUserName() {
    return userName;
    }
    public void setUserName(String userName) {
    this.userName = userName;
    }
    }set方法应该是就经典的了
      

  2.   


    class AAA{
       private String name;
       public AAA(String name){
        this.name=name;
        }
       public String getName(){
        return this.name;
        }
       public static void main(String [] atrgs){
         AAA a=new AAA("phenix");//当前创建AAA类型的a对象
          a.getName();//这时调用方法里边的this指的就是a对象,当前的对象。
        }
    }
      

  3.   

    if (this == otherObject) return true;这句话是判断指的是不是同一个对象,
    比如:
    Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
    Employee alice2=alice1;
    当调用alice1.equals(alice2);返回的就是真,true。
    在执行到equals方法中的时候,this是alice1,otherObject是alice2
      

  4.   

    乱七八糟    Employee类的equals方法没有重写
      

  5.   

     EqualsTest是写错了还是怎么的   
    你重写 EqualsTest的equalse方法,而去比较Employee
      

  6.   


    每个类都会维护一个唯一的,是唯一的,class对象,这句话:
    if (getClass() != otherObject.getClass())
    是为了判断引用的实际对象是不是同一种类型的对象

    够详细了吧
      

  7.   

    第一个是对比内存地址的. this == otherObjectotherObjec.getclass 是返回它的运行时类. 关于运行时类就是一个类型吧.this 指的是当前编写的这个类.
      

  8.   

    this 表示当前对象  如果alice1调用equals方法,则this就表示alice1所指向的对象if (getClass() != otherObject.getClass())这句话getClass()又指的是谁? otherObject.getClass()又是谁? 

    getClass()返回的是EqualsTest类   otherObject.getClass()是otherObject的类型
      

  9.   

    1、this是指调用equals的那个对象,相对于equals方法来时,它就是当前对象,也就是this指向的对象2、if (this == otherObject) return true;
    其实就是判断this和otherObject值是否相等,相等的话就返回true,不相等就往下执行
    alice1.equals(alice3):此时在equals()里面this指向alice1,alice3的值传给otherObject
    alice1、alice3分别指向不通的对象,所以this不等于otherObject,然后equals继续往下执行
    otherObject现在是指向一个对象的,所以不是null,equals继续往下执行
    getClass其实就是this.getClass()返回当前对象的运行时Type,都是Employee ,所以相等,equals继续往下
    this和otherObject的field的内容都是相同的(String的equals和Date的equals都重写)
    所以最后alice1.equals(alice3)返回了true分析完毕!
      

  10.   

    基本同意11楼的分析。
    但是有一点:“if (this == otherObject) return true; 
    其实就是判断this和otherObject值是否相等,相等的话就返回true,不相等就往下执行”
    我觉得应该这么说:判断this和otherObject是否指向同一个对象,也就是判断它们两个的内存地址是否相等,而不仅仅是值是否相等
      

  11.   

    可是我的例子里打印alice1.equals(alice3)的时候英爱otherObject指的是aloice3啊 所以如果if(this==otherObject)==比的是地址那应该是false啊
      

  12.   

    我想问一下
    AAA a1=new AAA();
    AAA a2=new AAA();
    a1==a2是false
    a1.equals(a2)也为false
    为什么?这和以下
    String str1=new String("abc");
    String str2=new String("abc");
    str1==str2为false
    str1.equals(str2)为true;都是引用类型,但是一个为false,一个为true,这是为什么,请高手帮忙解答一下
      

  13.   

    它们的值就是对象的地址,把this和otherObject是两个引用变量
      

  14.   

    当二者引用同一个对象的时候,当然相等,当二者引用的不是同一个对象的时候,就一定返回false???
    还得判断是不是对象的各个域是否相等,相等的话,也可以返回真。明白了吧.
    看看你的代码:public boolean equals(Object otherObject)
       {  
          if (this == otherObject) return true;//并没有else,返回假!!!
          if (otherObject == null) return false;//继续比较
          if (getClass() != otherObject.getClass())//继续比较
             return false;      Employee other = (Employee) otherObject;
          return name.equals(other.name)&& salary == other.salary && hireDay.equals(other.hireDay);
       }
      

  15.   

    这个AAA并没有重写equals方法,只是调用了Object的equals方法,这个方法只是判断两个对象是不是指向同一个
    对象,String就不一样了,他重写了equals方法。
      

  16.   


        public boolean equals(Object obj) {
    return (this == obj);
        }object的equals方法
      

  17.   

    this关键字代表当前类的对象.例如
    public class TT
            int i;

    public TT(int i)
    {
    this.i=i;
    }
    这段简单的代码就是在调用此类的构造方法的时候为区分i到底是哪个i,而用this关键字指明当前类的成员变量i.
    if (this == otherObject) return true;因为otherObject和this的类型都是object,也就是对象类型,所以在这里是判断this和otherObject是否指向同一个对象,,如果是,则返回true,下面的代码就不会执行了.
      

  18.   

    楼主的问题归根究底就是问this指的是什么?
    没错,this指的就是当前对象,那么什么是当前对象呢?
    我们知道this只能在方法内使用,那么哪个对象调用了这个方法,那么this就是指哪个对象
    举例:
    class B {}
    class A {
      int i;
      B b;
      void f(B b) {
        this.i = i;
        this.b = b;
      }
      public static void main(String s) {
        B b = new B();
        A a = new A();
        a.f(b);
      }
    }当执行到a.f(b)时进入方法调用,哪个对象调用那个有this方法,那this就是指这个对象,所以此时f里的this就是指a
      

  19.   

    读程序,哪个是当前类对象,this就是指向这个对象的
      

  20.   

    this指的是当前对象,比如说你正在给一个按钮写响应事件,他就指的是按钮。
    if(this==otherobject)当然是返回一个bool值了,if后面的括号里面就是一个判断对错的语句。
    哎呀,楼主写的很乱啊。不知道你这个是什么。后面的getclass()是一个方法,应该指的是这个方法的返回值。跟otherobject这应该是一个类吧?他的一个方法getclass()的返回值看是否相等。
      

  21.   

    写的太乱了,重写equals方法不是这样的
    if (this == otherObject) return true;
    this是指当前的类(EqualsTest),你拿当前的类和Object比较引用地址,肯定不能返回true
      

  22.   

    this指当前对象 当前对象是哪个? 能给我举个例子吗? 
    还有中间还有其他代码我指抽出其中的 
    下面的代码if (this == otherObject) return true;这句话返回的结果应该是什么?otherObject应该指向alice3 这里的this指的是谁?如果是alice1那返回结果是不是false? 
    if (getClass() != otherObject.getClass())这句话getClass()又指的是谁? otherObject.getClass()又是谁? 
    这是楼主的问题我来一一作答:
    第一问:
    this只指当前对象比如你上面那程序就是指的(EqualsTest)这个类的对象,在这个程序中对象alice1,因为你写的是alice1.equals(alice3),如果你改成alice2.equals(alice3)
    this就指向了alice2第二问:
    if (this == otherObject) return true // 这句话当然是返回什么就要看你(Object otherObject)这里
    传的什么值了这里的this指的就是EqualsTest类的对象,如果你是用这个类的对象来比较的话就返回true否则返回false;
    第三问:这里的this当然是alice1了我在第一问中回答到了楼主看下吧!
    第四问:我举例来说吧 alice1.equals(alice3)
    alice1是(EqualsTest)类的对象吧那么这里的getClass就是EqualsTest类,同理alice3也是它的对象otherObject.getClass()也指的是EqualsTest不知道楼主明白没有刚开始学这些是需要些时间来理解,慢慢就好了都是这样过来的@*(*(
      

  23.   

    this就是“我”的意思。用面向对象的话说,就是“当前对象”。
    当mouyong说“我”的时候,这个“我”就是mouyong,而当J_developer说“我”的时候,这个“我”就是J_developer。
    注意,this是代表当前对象,而不是代表当前类。(mouyong和J_developer都是“人类”的对象吧?哈哈)
    this.XXX就是“我的XXX”的意思。那么,谁在说this,那当前对象就是谁了呗。
      

  24.   

    getClass()方法是返回该对象的一个Class对象。
    大家都应该知道JVM(Java虚拟机)吧?在你new一个类的时候,虚拟机需要对你的类代码进行加载,这个加载的过程是由一个叫“类加载器”(ClassLoader)的类来完成的。在大多数情况下,我们不需要提供类加载器,因为虚拟机会帮助我们提供的。这个类加载器完成许多工作,其中一项工作就是为每个对象附加一个Class对象(注意,Class是一个类,大家可以在J2SE的帮助里查找到它),Class对象很重要的工作就是完成反射(反射?简单说,就是让对象自己知道自己是什么类型的,自己有些什么方法等等很高级的功能。)推荐一本书,这本书对于你的问题写的非常详细:《深入Java虚拟机(第二版)》机械工业出版社出版。网上也有电子版的,你可以找来认真读一下。你问的问题非常好,这些问题能引导你更进一步了解Java语言的核心,进而了解虚拟机的构成,甚至最后,你可以做你自己的虚拟机。继续努力。
      

  25.   

    一 ,this 指的 就是 从这个位置开始逐层向外找找到的第一个类,我理解的是jvm把.java放在堆栈中 然后从this逐个向外找找到第一个class就你发的那段代码分析一下public class EqualsTest
    {  
       public static void main(String[] args)
       {  
          Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
          Employee alice2 = alice1;
          Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
          Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);      System.out.println("alice1 == alice2: " + (alice1 == alice2));
          System.out.println("alice1 == alice3: " + (alice1 == alice3));
          System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));
          System.out.println("alice1.equals(bob): " + alice1.equals(bob));
          System.out.println("bob.toString(): " + bob);
     public boolean equals(Object otherObject)
       {  
          if (this == otherObject) return true;
          if (otherObject == null) return false;
          if (getClass() != otherObject.getClass())
             return false;      Employee other = (Employee) otherObject;
          return name.equals(other.name)&& salary == other.salary && hireDay.equals(other.hireDay);
       }这个EqualsTest类里的this在同一个实例对象中 实际上都是同一个对象,就是它本身
    比如EqualsTest aaaa= new EqualsTest();
    在aaaa这个对象里的所有的方法中的this都是指 aaaa自己;
    二 ,
    你这个类EqualsTest里的main方法中,用到Employee这个类,然后里面用到的 “==”“equals” 等都要看在 Employee中的重载和定义才能确定返回值。
    EqualsTest中的equals方法:第一个return判断的是 如果当前对象和参数的对象是同一个就返回true;
    第二个不用解释;第三个if (getClass() != otherObject.getClass()) 前面的getClass()实际上就是this.getClass()在编译的时候jvm会给你加上一个this.
    第四个 就是将当前对象的属性和 other的相关属性比较然后返回结果这样说明白了没