栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-09-29 Java学习(继承)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-09-29 Java学习(继承)

一、Object:所有类的超类 1. equals方法

默认为引用相等,可以重写为状态相等。(同时要重写hashCode方法)
在IDEA中直接可以使用模板。

 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        //已经判断o和this已经是相同类了,所以对Objects可以随意转换
        return Double.compare(employee.salary, salary) == 0 &&
                id == employee.id &&
                Objects.equals(name, employee.name) &&
                Objects.equals(hireDay, employee.hireDay);
    }

ps. getClass方法将返回一个对象所属的类。

2. hashCode方法

hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值由对象的存储地址得出。
字符串有相同散列码,因为字符串的散列码由内容导出,而字符串构建器则有着不同散列码,因为StringBuilder类中没有定义hashCode方法,而Object类的默认hashCode方法会从对象的存储地址的出散列码。

        String s="OK";
        StringBuilder sb=new StringBuilder(s);
        System.out.println(s.hashCode()+" "+sb.hashCode());
        String t=new String("OK");
        StringBuilder tb=new StringBuilder(t);
        System.out.println(t.hashCode()+" "+tb.hashCode());
        //2524 1163157884
        //2524 1956725890

如果重新定义了equals方法,就必须为用户可能插入散列表的对象重新定义hashCode方法

    @Override
    public int hashCode() {
        return Objects.hash(name, salary, hireDay, id);
    }
3. toString方法
    @Override
    public String toString() {
        return getClass().getName() +
                "[name='" + name + ''' +
                ", salary=" + salary +
                ", hireDay=" + hireDay +
                ", id=" + id +
                ']';

最好通过调用getClass().getName()获得类名的字符串,而不要将类名硬编码写到toString方法中,这样toString方法也可以由子类调用。(这样子类可以直接写super.toString())

二、泛型数组列表ArrayList

“可变长度的数组容器”
是一个有类型参数的泛型类

  ArrayList staffs=new ArrayList<>();//可能100个元素,实际上初始状态里面1个元素都没有;而数组则是分配了100个空白槽

        staffs.add(new Employee("abc",10000,1999,9,1));
        // ...

        for(Employee e:staffs)
        {
            e.raiseSalary(5);
        }
        
        for(Employee e:staffs)
        {
            System.out.println("name="+e.getName()+"salary"+e.getSalary()+"hireDay="+e.getHireDay());
        }
三、对象包装器与自动装箱

Integer类对应基本类型int,通常,这些类称为包装器Wrapper。

想要定义一个整形数组列表,尖括号中的类型参数不允许是基本类型,
ArrayList list=new ArrayList<>();

而调用 list.add(3)会自动变换成list.add(Integer.valueOf(3))
这种变换称为自动装箱(autoboxing)

相反 则会自动拆箱
int n=list.get(i)

ps.自动装箱和拆箱是编译器要做的工作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/282445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号