Java基础知识点复习

本文详细介绍了Java中的final关键字,包括变量、方法和类的修饰,强调了其在防止代码修改和保证数据不变性方面的作用。同时,解释了线程、进程和程序的基本概念及其关系,指出线程是CPU调度的基本单位,而进程则是操作系统分配资源的单位。此外,讨论了hashCode和equals方法的重要性,特别是在散列表如HashSet和HashMap中的应用,以及为何需要重写这两个方法以确保对象正确判重和存储。
摘要由CSDN通过智能技术生成

关于final关键字的总结

final 关键字可以修饰在三个地方: 变量、方法、类

  • 对一个final变量:如果final修饰的是的变量是基本数据类型,则其数值不能被修改。如果修饰的是引用数据类型,其引用不能指向其他的对象。

  • final修饰类: 被final修饰的类不能被继承,final修饰的类默认的成员方法会被隐式的使用final;

  • final修饰方法:将方法锁定,防止任何继承的类改变方法的含义

线程、进程和程序的概念,以及他们之间的关系

  • 线程

一个进程可以产生多个线程,多个线程之间功能进程的内存空间和操作系统资源,所以线程间的切换带来的系统开销要小于进程间的切换。线程是CPU调度的最小单元,进程是操作系统分配资源的最小单元,线程又被成为轻量级的进程

  • 程序

程序是有数据和文件足称,也就是常说的代码,它是一个静态的概念,被存储在计算机的硬盘设备上。

  • 进程
    当静态的程序被编译、链接后载入到内存中的时候。一个程序转换为了一个进程,由静态的概念转变为动态的概念。进程就是程序一次的执行过程,它在计算机中一个指令一个指令的执行着,同时它还占据着系统的内存资源,CPU时间、文件、输入输出设备等。

hashCode 和 equals的规定

  • 两个对象相等,它们的hashCode相同
  • 两个对象的hashCode相同,它们不一定相同
  • 两个对象相同,分别调用两次equals方法都返回true
  • 因此,equals方法被覆盖,则hashCode方法也必须被覆盖
  • hashCode方法默认是作用是对堆上的对象产生独特的值。如果没有重写hashCode(),则该class的两个对象一定不相同,哪怕是它们都指向的是相同的数据。

hashCode有什么作用

在HashSet中,添加一个元素的时候,首先对对象计算一次hashCode值,用来判断元素应该添加到什么位置,同时会和已经添加的元素的hashCode值做比较,如果没有相同的hashCode值,认为这个元素没有被添加过,如果存在相同的hashCode值,才会调用equals方法判断这两个元素的各个属性是否相同,如果相同,不会将元素插入;否则的话会重新计算hashCode,判断该放在什么位置。

为什么要重写hashCode()和equals()呢

当我们把一个对象放入到散列表中的时候,Map中做key,Set中做元素的时候。需要考虑的对象的判重问题。我们知道Java中一个Class默认继承自Object类,在Object中定义了两个方法,equals()和hashCode()。equals()方法的默认实现是比较两个对象的地址,hashCode方法是一个native方法,默认也是根据对象的地址计算hashCode。就会出现这种情况,两个对象它们的属性值完全一样,但是它们的hashCode值不一样,在调用Set add(),Map put() 都会被认为没有添加过该元素,就导致了Set集合去重“失效",Map集合 "key重复"的这种异常现象。所以当我们的对象需要放到HashSet或者放到HashMap中做key的时候,应该重写它的equals()和hashCode()方法。

持续更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值