顺便看看这个程序的输出结果:和我想的不一样啊! public class StringTest { public boolean equals(Object b) { System.out.println("equals is called"); return this==b; } public static void main(String[]arg) { String a=new String("Hello"); String b=new String("Hello"); if(a.equals(b)) System.out.println("true"); else System.out.println("false"); } }
给你个例子! abstract class Base{ public Base(int i){ System.out.println("Base constructor, i ="+i); } public abstract void f(); } public class AnonymousConstructor{ public static Base getBase(int i){ return new Base(i){ { System.out.println("Inside instance initializer"); } public void f(){ System.out.println("In anonymous f()"); } }; } public static void main(String[] args){ Base base = getBase(47); base.f(); } }
public class StringTest {
public boolean equals(Object b)
{
System.out.println("equals is called");
return this==b;
}
public static void main(String[]arg)
{
String a=new String("Hello");
String b=new String("Hello");
if(a.equals(b))
System.out.println("true");
else
System.out.println("false");
}
}
abstract class Base{
public Base(int i){
System.out.println("Base constructor, i ="+i);
}
public abstract void f();
}
public class AnonymousConstructor{
public static Base getBase(int i){
return new Base(i){
{
System.out.println("Inside instance initializer");
}
public void f(){
System.out.println("In anonymous f()");
}
};
}
public static void main(String[] args){
Base base = getBase(47);
base.f();
}
}
equals就是看他们是否相同了,他不是比较地址的。
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class StringTest {
public boolean equals(Object b) {
System.out.println("equals is called");
return this == b;
} public static void main(String[] arg) {
StringTest a = new StringTest();
StringTest b = new StringTest(); if (a.equals(b)) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
}
//===========================结果
equals is calledfalse