题目:(1)创建一个Dog类,它包含两个String域:name和says。在main()方法中,创建两个Dog对象,一个名字叫spot(叫声为“Ruff!”),另一个为scruffy(“Wurf!”)显示他们的叫声
(2)创建一个新的Dog索引,并对其赋值为spot对象。测试==和equlas方法比较引用的结果
分析:==和equlas方法的区别。
public class test { public static void main(String[] args) { Dog spot= new Dog("spot","Ruff!"); Dog scruffy=new Dog("scruffy","wuff!"); System.out.println(spot.name+" "+spot.says); System.out.println(scruffy.name+" "+scruffy.says); Dog spot1=spot; System.out.println("spot1==spot "+(spot1==spot)); System.out.println("spot1.equals(spot) "+(spot1.equals(spot))); System.out.println("scruffy==spot "+(scruffy==spot)); System.out.println("scruffy.equals(spot) "+(scruffy.equals(spot))); } } class Dog{ String name; String says; public Dog(String name,String says){ this.name=name; this.says=says; } }
结果:
spot Ruff! scruffy wuff! spot1==spot true spot1.equals(spot) true scruffy==spot false scruffy.equals(spot) false
因为没有覆盖equals方法所以==和equals实质上是一样的。都是判断引用是否一样。
Object类中equals是这样写的(jdk1.8)
public boolean equals(Object obj) { return (this == obj); }