public class Test {
static class Cat {
public Cat(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1);
System.out.println(c2);
boolean b1 = c1.equals(c2);
System.out.println(b1);
String s1=new String("老王");
String s2=new String("老王");
System.out.println(s1);
System.out.println(s2);
boolean b2=s1.equals(s2);
boolean b3=s1==s2;
System.out.println(b2);
System.out.println(b3);
String s3="老王";
String s4="老王";
boolean b4=s3==s4;
System.out.println(b4);
}
}
第一个b1为false,因为他们两个比较的是他们两个的内存地址,c1和c2是两个对象所以他们的内存地址是不同的
对于 == :
作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
作用于引用类型的变量,则比较的是所指向的对象的地址;
对于 equals:
equals方法不能作用于基本数据类型的变量;
如果没有对Object中equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,反之则比较的是内容
第二个b2是true 他们两个是字符串之间的比较比较用的equals也是正确的
第三个b3是false s1和s2是两个对象==比较的是他们的地址对象不一样,地址也不一样
第四个b4比较的是他们的地址,在字符串里面他们两个的值都相同所有他们的地址也相同