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);
}
还有中间还有其他代码我指抽出其中的
下面的代码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);
}
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方法应该是就经典的了
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对象,当前的对象。
}
}
比如:
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice2=alice1;
当调用alice1.equals(alice2);返回的就是真,true。
在执行到equals方法中的时候,this是alice1,otherObject是alice2
你重写 EqualsTest的equalse方法,而去比较Employee
每个类都会维护一个唯一的,是唯一的,class对象,这句话:
if (getClass() != otherObject.getClass())
是为了判断引用的实际对象是不是同一种类型的对象
够详细了吧
getClass()返回的是EqualsTest类 otherObject.getClass()是otherObject的类型
其实就是判断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分析完毕!
但是有一点:“if (this == otherObject) return true;
其实就是判断this和otherObject值是否相等,相等的话就返回true,不相等就往下执行”
我觉得应该这么说:判断this和otherObject是否指向同一个对象,也就是判断它们两个的内存地址是否相等,而不仅仅是值是否相等
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,这是为什么,请高手帮忙解答一下
还得判断是不是对象的各个域是否相等,相等的话,也可以返回真。明白了吧.
看看你的代码: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);
}
对象,String就不一样了,他重写了equals方法。
public boolean equals(Object obj) {
return (this == obj);
}object的equals方法
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,下面的代码就不会执行了.
没错,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
if(this==otherobject)当然是返回一个bool值了,if后面的括号里面就是一个判断对错的语句。
哎呀,楼主写的很乱啊。不知道你这个是什么。后面的getclass()是一个方法,应该指的是这个方法的返回值。跟otherobject这应该是一个类吧?他的一个方法getclass()的返回值看是否相等。
if (this == otherObject) return true;
this是指当前的类(EqualsTest),你拿当前的类和Object比较引用地址,肯定不能返回true
还有中间还有其他代码我指抽出其中的
下面的代码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不知道楼主明白没有刚开始学这些是需要些时间来理解,慢慢就好了都是这样过来的@*(*(
当mouyong说“我”的时候,这个“我”就是mouyong,而当J_developer说“我”的时候,这个“我”就是J_developer。
注意,this是代表当前对象,而不是代表当前类。(mouyong和J_developer都是“人类”的对象吧?哈哈)
this.XXX就是“我的XXX”的意思。那么,谁在说this,那当前对象就是谁了呗。
大家都应该知道JVM(Java虚拟机)吧?在你new一个类的时候,虚拟机需要对你的类代码进行加载,这个加载的过程是由一个叫“类加载器”(ClassLoader)的类来完成的。在大多数情况下,我们不需要提供类加载器,因为虚拟机会帮助我们提供的。这个类加载器完成许多工作,其中一项工作就是为每个对象附加一个Class对象(注意,Class是一个类,大家可以在J2SE的帮助里查找到它),Class对象很重要的工作就是完成反射(反射?简单说,就是让对象自己知道自己是什么类型的,自己有些什么方法等等很高级的功能。)推荐一本书,这本书对于你的问题写的非常详细:《深入Java虚拟机(第二版)》机械工业出版社出版。网上也有电子版的,你可以找来认真读一下。你问的问题非常好,这些问题能引导你更进一步了解Java语言的核心,进而了解虚拟机的构成,甚至最后,你可以做你自己的虚拟机。继续努力。
{
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的相关属性比较然后返回结果这样说明白了没