大家看看这两个程序

来源:百度知道 编辑:UC知道 时间:2024/05/25 11:33:01
class Student
{
private String name;
private int age;
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public static void main(String []args)
{
Student st1=new Student("zhangsan",20);
Student st2=new Student("zhangsan",20);
if(st1.equals(st2))
System.out.println("st1 equlas st2");
else
System.out.println("st1 not equals st2");
String str1=new String("abc");
String str2=new String("abc");
if(str1.equals(str2))
System.out.println("str1 equals str2");
else
System.out.println("str1 not equals str2");
}
}
这里面为什么str1=str2,而st1却不等于st2呢,他们都是两个“长得一样”的两个不同对象,请高手指点呀,或许我是对equals方法有些误解,我记得它就是如果两个不同的对象长得一样便是true呀

equals 方法是用来比较字符串的,对象比较是否是同一个用 ==

当你用
String str1=new String("abc");
String str2=new String("abc");
if(str1.equals(str2))
为什么比较出来是真呢,因为字符串的tostring方法就是输出字符内容, 两个内容都为 abc 当然想等,


Student st1=new Student("zhangsan",20);
Student st2=new Student("zhangsan",20);
if(st1.equals(st2))
这里的两个对象是 Student 类型的,toString 方法是继承了object的,没有重写过,所以输出的是类的标识, 是不一样的,
你可以用 System.out.println( st1 ); 输出student类型的对象查看结果便知

所以有一个方法可以让结果为真,就是重写tostring 方法,例如

class Student
{
private String name;
private int age;
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString(){
return name;
}
}

如果你重写Student类的equals()方法就能得到st1等于st2的结果。
String是JDK中的底层类,其中已经写好了equals()方法,而你自己写的类没有重写这个方法。
在没有重写equals()方法的类中,当调用此方法时会调用父类(Object)的equals()方法,Object中的该方法只是简单的进行"a==b&