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判断?要判断是否都是代码这么写的,但这么写的意义是什么?









qq_踏雪_5
浏览 1075回答 1
1回答

慕慕1581088

(没错,又是我!)基本数据类型通常用==判断是否相等引用数据类型用==比较的是两个对象的地址是否相同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;elsereturn false;}因为有起好的名字,所以我们就用equals了(我们取名字的水平就是这么匮乏),你取其他的名字也是可以的。要注意一点,昨天说过,强转前应该判断一下obj对象是不是Car的类型的要不可能抛ClassCastException 类型转换异常if(obj instanceof Car)    Car temp = (Car)obj;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java