5-2编程练习,不太懂equals的意思。是否里面的equals都有必要
我是机动车!
car1和car2的引用比较:true
===============================
张小泉出租车是属于长生公司的
出租车是提高市民生活质量的重要条件之一
taxi的信息是张小泉拥有一辆蓝色出租车
===============================
孙二娘拥有的紫色颜色的私家车,有7座位
家用汽车大多拥有5个座位
public class Car {
private String color;
private String userName;
public Car() {}
public Car(String color, String userName) {
this.color=color;
this.userName=userName;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void use() {
System.out.println("我是机动车!");
}
public boolean equals(Object obj){
if(obj==null)
return false;
Car temp = (Car)obj;
if(this.getColor().equals(temp.getColor())&&this.getUserName().equals(temp.getUserName()))
return true;
else
return false;
}
public boolean equals(Car obj) {
if(obj==null)
return false;
Car temp = obj;
if(this.getColor().equals(temp.getColor())&&this.getUserName().equals(temp.getUserName()))
return true;
else
return false;
}
}
public class Test {
public static void main(String[] args){
Car car1 = new Car("红","小汽车");
Car car2 = new Car("红","小汽车");
car1.use();
boolean flag = car1.equals(car2);
System.out.println("car1和car2的引用比较:"+flag);
System.out.println("===============================");
Taxi taxi1=new Taxi("蓝色","张小泉","长生");
taxi1.ride();
taxi1.use();
System.out.println(taxi1.toString());
System.out.println("===============================");
HomeCar homecar1=new HomeCar("紫色","孙二娘",7);
homecar1.display();
homecar1.display(5);
}
}
我只贴出了与equal有关的类。以上程序运行是成功的
不是很懂为什么要用equals判断?要判断是否都是代码这么写的,但这么写的意义是什么? |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
(没错,又是我!)
基本数据类型通常用==判断是否相等
引用数据类型用==比较的是两个对象的地址是否相同
equals是Object 类的方法,内部实现为:
public boolean equals(Object obj){
return (this == obj);
}
用的也是==,因为Object是所有类的父类,所以每个类即使没定义
也都能用equals方法不过和用==没有区别,要想实现特定的比较方法,
需要在本类中重写equals,如你所做的:
public boolean equals(Object obj){
if(obj==null)
return false;
Car temp = (Car)obj;
if(this.getColor().equals(temp.getColor())&&this.getUserName().equals(temp.getUserName()))
return true;
else
return false;
}
因为有起好的名字,所以我们就用equals了(我们取名字的水平就是这么匮乏),
你取其他的名字也是可以的。
要注意一点,昨天说过,
强转前应该判断一下obj对象是不是Car的类型的
要不可能抛ClassCastException 类型转换异常
if(obj instanceof Car)
Car temp = (Car)obj; |
|
|
|
|