为了账号安全,请及时绑定邮箱和手机立即绑定

5-2编程练习,不太懂equals的意思。是否里面的equals都有必要

5-2编程练习,不太懂equals的意思。是否里面的equals都有必要

qq_踏雪_5 2018-02-18 17:40:28
我是机动车!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判断?要判断是否都是代码这么写的,但这么写的意义是什么?
查看完整描述

1 回答

?
慕慕1581088

TA贡献8条经验 获得超9个赞

(没错,又是我!)

基本数据类型通常用==判断是否相等

引用数据类型用==比较的是两个对象的地址是否相同

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;


查看完整回答
1 反对 回复 2018-02-18
  • 1 回答
  • 0 关注
  • 1074 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信