6.Object类常用的两个方法

一、equals()方法

(1)equals()方法解析

  1. java.lang.Object类中equals()方法定义:
        public boolean equals(Object obj) {
            return (this == obj);//直接比较两个对象的引用地址是否相等
        }
    
  2. String、Date、File、包装类等重写了Object类中的equals()方法,比较两个对象中的实体内容是否相等。
  3. 对于自定义的类来说,如果没有重写Object类中的equals()方法,调用的equals()时,仍然是比较两个对象的引用地址是否相同。
  4. 一般情况下,在开发中一旦调用了自定义类中的equals(),通常是重写之后的equals()方法。而一般重写的equals()方法是判断两个对象的属性是否相等。

例子:

public class CustomerTest {
    public static void main(String[] args) {
        String str1 = new String("Tom");
        String str2 = new String("Tom");
        //==是判断两个对象的引用地址是否相等
        System.out.println(str1 == str2);//false
       
        //String类中重写了equals()方法,判断两个字符串的值是否相
        System.out.println(str1.equals(str2));//true
    }
}
public class Customer {
    private String name;
    private int age;
    public Customer(){}
    public Customer(String name,int age){
        this.name = name;
        this.age = age;
    }
    //手动从重写equals()方法
    @Override
    public boolean equals(Object obj) {
        if (this == obj)return true;//如果这是一个对象就不用继续判断
        if (obj instanceof Customer){
            Customer customer = (Customer) obj;
            return this.name.equals(customer.name)&& this.age == customer.age;
        }
        return false;
    }
}

(2)面试题:== 和 equals() 区别?

==:

  • 使用范围:可以操作基本数据类型 和引用数据类型
  • 如操作的是基本数据类型:比较两个基本数据类型的变量对应的值是否相等
  • 如果操作的是引用数据类型,比较两个引用的地址是否相等
  • == 符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。

例:

public class CustomerTest {
    public static void main(String[] args) {
	// == 对于基本类型值比较对应的值是否相等。
        int num1 = 10;
        int num2 = 10;
        System.out.println(num1 == num2);//true,

	//== 两边的数据没有要求一样,只要可以自动提升就可以了
        double d1 = 10.0;
        System.out.println(num1 == d1);//true

        char c2 = 'A';
        int num = 65;
        System.out.println(c2 == num);//true
    }
}

相关知识:基本数据类型的自动转换和提升字符串缓冲池

equals()方法:

  • 使用范围:只适用于引用数据类型
  • 具体的使用:见上面的1-4

小练习:
equals方法于==

二、toString()方法

(1)toString()方法解析

  1. java.lang.Object类中toString()方法定义:
     public String toString() {
      return getClass().getName() + "@" + Integer.toHexString(hashCode());
      }
      //返回:全类名+@+引用地址的十六进制字符串:cn.edu.dgut.base.Per@1b6d3586
    
  2. 当我们打印一个对象的引用时,会自动调用其toString()
  3. String、Date、File、包装类等重写了Object类中的toString(),返回其代表的具体内容。
  4. 在进行String与其它数据类型连接操作时,会自动调用toString()方法

(2)面试题:

1.区分println(char[])和println(object)

面试题
答案:

abc
[I@4554617c
[D@4554617c

println实现
println方法解析:

  • 参数是char[]时调用的时println(char[])遍历字符数组
  • 参数是byte[] 、short[] 、int[] 、float[]、 double[]的对象时调用的是println(Object),而且实际上会自动调用println(Object.toString()),其中toString()方法没有重写
  • 参数是String 、File 、Date时调用的是println(Object),其背后也是调用println(Object.toString()),但这些类中的toString()方法都重写了,输出的是具体内容。
2.String与其他数据类型拼接时会调用toString()方法。

面试题
答案:

abc
ch[C@1b6d3586

System.out.println(“ch=”+ch)背后实现原理:
背后原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值