java 的equals方法和toString()方法的使用

发布于:2023-01-18 ⋅ 阅读:(380) ⋅ 点赞:(0)

一、equals:比较两个实例值是否相等

“==” 与 equals 的区别

== xxx.equals(xxx)
可以在基本数据类型变量和引用数据类型变量中使用 只能在引用型数据类型变量中使用
基本数据类型比较数值是否相同 在Object类中的equals方法与==相同
引用数据类型比较地址值是否相同

Object 中定义的equals()

public boolean equals(Object obj){
			return(this == obj);
	}

不难看出,根父类Object中的equals与的判断相同,所以当我们需要特定功能的比较的equals函数时,我们就应该在自定义类中重写该方法。
且类似于String、Date、File、包装类等都重写了equals方法

Objects中定义的equals

进行了非空判断,更安全

    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
String 中重写的equals()

官方在进行字符串比较时,没有对象自己的equals方法,而是选择Objects的equals方法来比较两个对象

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (!COMPACT_STRINGS || this.coder == aString.coder) {
                return StringLatin1.equals(value, aString.value);
            }
        }
        return false;
    }
Date 中重写的equals()
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
重写的equals()的步骤以String为例
    public boolean equals(Object anObject) {
   // 1、首先使用==判断,如果可以判断,直接返回true
        if (this == anObject) {
            return true;
        }
   //2、第一步无法判断,进一步使用instanceOf判断anObject是否为String的一个实例
        if (anObject instanceof String) {
        	//anObject是String的一个实例 则发生向下转型
            String aString = (String)anObject;
            //返回各个属性的对比结果
            if (!COMPACT_STRINGS || this.coder == aString.coder) {
                return StringLatin1.equals(value, aString.value);
            }
        }
        //anObject不是String的实例则直接返回false
        return false;
    }
eclipse中重写的equals()的快捷键 菜单栏Source->Generate hashCode() and equals()

二、toString

当输出一个类对象时,实际上是调用当前对象的toString方法

Object 中定义的equals()

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

类似于equals,当我们需要特定功能的比较的toString函数时,我们就应该在自定义类中重写该方法。
且类似于String、Date、File、包装类等都重写了toString方法

String中重写的toString方法

    public String toString() {
        return this;
    }

在自定义类中重写的toString方法

public class Car {
     
   //成员变量
    private String carNo;
    private String carName;
    private String color;
    private double price;
     
   //有参构造函数
    Car(String carNo,String carName,String color,double price){
        this.carNo=carNo;
        this.carName=carName;
        this.color=color;
        this.price=price;
    }
     
    //get set方法
    public String getCarNo(){
        return carNo;
    }
     
    public void setCarNo(String carNo){
        this.carNo=carNo;
    }
     
    public String getCarName() {
        return carName;
    }
 
    public void setCarName(String carName) {
        this.carName = carName;
    }
 
    public String getColor() {
        return color;
    }
 
    public void setColor(String color) {
        this.color = color;
    }
 
    public double getPrice() {
        return price;
    }
 
    public void setPrice(double price) {
        this.price = price;
    }
//重写toString();
    public String toString(){
        return "这个汽车名叫 "+carName+",型号是 "+carNo+",汽车颜色 "+color+",价格 "+price;
    }
     
    public static void main(String[] args){
       //创建一个Car的对象
    Car myCar=new Car("苏A 4995","长安汽车","灰蓝色",70000.00);   //类名开头字母大写
        System.out.println(myCar.toString());
    }
}
eclipse中重写的toString()的快捷键 菜单栏Source->Generate toString()…

小技巧:要看根父类提供了哪些可以重写的基础函数时可以直接new一个跟父类的实例 ,再调用方法 ctrl+点击对应的方法名。


网站公告

今日签到

点亮在社区的每一天
去签到