1、System.out.println(c.equals(d)); //然而这里的结果TRUE是因为String重写了equals方法了,只判断其中的值(将字符串中每个字符进行比较,只有全部一样才返回TRUE)相等就返回TRUE。
2、System.out.println(a.equals(b)); //这里的结果是false是因为Student这个类中没有重写equals方法,还是调用object方法的equals方法,比较的是对象的引用,当然返回FALSE,如果你想要返回TRUE,可以重写equals方法,判断对象中的name和age是否相等即可
class student
{ private String name;
private int age;
public student(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(student stu){ //这里重写equals方法
if(stu.name == this.name && stu.age == this.age){
return true;
}else{
return false;
}
}
}
public class Hello{
public static void main(String[] args){
student a=new student("LUCY",20);
student b=new student("LUCY",20);
String c=new String("123");
String d=new String("123");
System.out.println(a==b); //false
System.out.println(a.equals(b)); //true
System.out.println(c==d); //false
System.out.println(c.equals(d)); //true
}
}
在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。
基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。
java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。
其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。
总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.或者说,,"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
java中String类型不是基本数据类型,==用于基础类型如Double等,String是一个Object,equals是为String提供的一个对象方法。你定义的student是一个含有两个私有成员变量的对象,和String是不同的,所以你得自己写个比较的方法
楼主 去看看值传递和引用传递就知道了 String c=new String("123");创建了两个对象 一个是123 一个是c
==比较的是对象的值 c==d表示的是:123==123 而c.equals(d)表示的是c和d的引用地址 而这里c和d都是指向同一个值的引用地址 所以打印出来就是true了