IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 2021-09-29 Java学习(继承) -> 正文阅读

[Java知识库]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<Employee> 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<Integer> list=new ArrayList<>();

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

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

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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 11:48:08  更:2021-09-30 11:49:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:10:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码