Object类

1,概念

它是java中最顶层的类,所有对象(包括数组)都可以使用该类中的方法.

2,类中的几个比较重要的方法

2.1   String toString():返回该对象的字符串表示,在Object中的该方法它默认的是返回 getClass().getName() +'@' +Integer.toHexString(hashCode()),

上面这段代码大体返回的是对象的名称+对象的哈希值的十六进制的形式(是字符串).

2.2  boolean equals(Object obj)     在Object中,该方法默认的是比较对象的地址,一般在设计类的时候,要复写该方法,来建立本类特有的判断对象的方法.

2.3  int hashCode()   返回该对象的哈希值,一般我们复写equals()的时候,一定也要复写hashCode()方法.以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

    原因:我们复写了equals后,加入不复写hashcode的话,会出现两对象equals的相同了,但是他们的hashCode就不同了(以下插入的代码中,楼主没复写hashcode,已经出现了p2和p4,equals相同了,到时hashcode不同).大白话:同时复写这2个方法,我们就是要保证equals相同的,hashcode也必须相同,这样来维护hashCode方法的常规协定.        

3,关于哈希

概念:它是存储键值对的,(key->value),和集合中的Map相似,它能把key映射到表中的任意位置来直接访问,这样的访问速度非常快.

以下我从javaapi中,对哈希这个方法的理解:

      同一个对象,在调用多次哈希方法的时候,它返回的肯定是相同的整数,但是这个整数是变化的不确定的.

      在Object中的equals()如果我们不复写的话,由于它比较的是地址的值,所有如果2个对象的地址相同的话,它们返回的也是相同的但是是变化的整数.这里需要注意一点,一般用户都会复写equals(),复写的方法如果不是比较2个对象的地址,而是比较对象的属性或者其他一些规则的话,这个时候2个对象就是equals相同的,他们返回的哈希值的方法也是不同的.具体要以下代码.对象p2和p4已经反应出了刚才我说明的问题.

package cn.wjd.objectdemo;
class Person{
    private int age;
    public Person(int age) {
        super();
        this.age = age;
    }    
    //复写Object中的equals方法,假如不复写的话,equals()还是比较的是地址
    /*
     * 一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
     */
    @Override
    public boolean equals(Object obj) { //子类向上转型,Person->Object,会隐藏子类的特有属性,如age
        if(!(obj instanceof Person)){
            //return false;
            throw new RuntimeException("类型错误");
        }
        Person p = (Person)obj;
        return this.age == p.age;
    }    
}
class Demo{
}
public class ObjectDemo {
    public static void main(String[] args) {
        Person p1 = new Person(21);
        Person p2 = new Person(23);
        Person p4 = new Person(23);
        Person p3 = p1;
        Demo d = new Demo();
        System.out.println(p2.equals(p4));//true
        System.out.println("p1哈希" + p1.hashCode());//12357150
        System.out.println("p2哈希" + p2.hashCode());//18248114
        System.out.println("p3哈希" + p3.hashCode());//12357150
        System.out.println("p4哈希" + p4.hashCode());//8549963
        System.out.println(p1 == p2);//false
        System.out.println(p1.equals(p3));//true
        System.out.println(p1.equals(p2));//false
        //System.out.println(p1.equals(d));
        /*
         * 获取对象的字节码文件对象,它的含义:各个不同的对象向上抽取后,形成的Class文件,里面有构造方法,对象的属性,各种方法
         */
        System.out.println("------------------------------------");
        Class clazz1 = p1.getClass();
        Class clazz2 = p2.getClass();
        System.out.println(clazz1 == clazz2);//true,一个Person的class文件,它能产生好多对象,如上面的p1和p2
        System.out.println("------------------------------------");
        System.out.println(p1);//Person@c791b9
        System.out.println(p1.getClass().getName() + "#" + Integer.toHexString(p1.hashCode()));//Person#bc8e1e
    }
}

总结,在以后设计类的时候,一般都要复写以上三个方法.

转载于:https://www.cnblogs.com/driverwjd/p/3815526.html

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值