每日五道java面试题之java基础篇(五)

news2025/1/8 5:54:10

在这里插入图片描述

第一题. final、finally、finalize 的区别?

  • final ⽤于修饰变量、⽅法和类:final 修饰的类不可被继承;修饰的⽅法不可被重写;修饰的变量不可变。
  • finally 作为异常处理的⼀部分,它只能在 try/catch 语句中,并且附带⼀个语句块表示这段语句最终⼀定
    被执⾏(⽆论是否抛出异常),经常被⽤在需要释放资源的情况下, System.exit (0) 可以阻断 finally 执
    ⾏。
  • finalize 是在 java.lang.Object ⾥定义的⽅法,也就是说每⼀个对象都有这么个⽅法,这个⽅法在 gc 启
    动,该对象被回收的时候被调⽤。⼀个对象的 finalize ⽅法只会被调⽤⼀次,finalize 被调⽤不⼀定会⽴即回收该对象,所以有可能调⽤finalize 后,该对象⼜不需要被回收了,然后到了真正要被回收的时候,因为前⾯调⽤过⼀次,所以不会再次调⽤ finalize 了,进⽽产⽣问题,因此不推荐使⽤ finalize ⽅法。

第二题. ==和 equals 的区别?

== : 它的作⽤是判断两个对象的地址是不是相等。即,判断两个对象是不是同⼀个对象(基本数据类型 == ⽐较的是值,引⽤数据类型 == ⽐较的是内存地址)。

equals() : 它的作⽤也是判断两个对象是否相等。但是这个“相等”⼀般也分两种情况:

  • 默认情况:类没有覆盖 equals() ⽅法。则通过 equals() ⽐较该类的两个对象时,等价于通过“ == ”⽐较这两个对象,还是相当于⽐较内存地址。
  • ⾃定义情况:类覆盖了 equals() ⽅法。我们平时覆盖的 equals()⽅法⼀般是⽐较两个对象的内容是否相同,⾃定义了⼀个相等的标准,也就是两个对象的值是否相等。

第三题.hashCode 与 equals?

这个也是⾯试常问——“你重写过 hashcode 和 equals 么,为什么重写 equals 时必须重写 hashCode ⽅法?”

什么是 HashCode?
hashCode() 的作⽤是获取哈希码,也称为散列码;它实际上是返回⼀个 int 整数,定义在 Object 类中, 是⼀个本地⽅法,这个⽅法通常⽤来将对象的内存地址转换为整数之后返回。

public native int hashCode();

哈希码主要在哈希表这类集合映射的时候⽤到,哈希表存储的是键值对(key-value),它的特点是:能根据“键”快速的映射到对应的“值”。这其中就利⽤到了哈希码!

为什么要有 hashCode?
上⾯已经讲了,主要是在哈希表这种结构中⽤的到。

例如 HashMap 怎么把 key 映射到对应的 value 上呢?⽤的就是哈希取余法,也就是拿哈希码和存储元素的数组的⻓度取余,获取 key 对应的 value 所在的下标位置。

为什么重写 quals 时必须重写 hashCode ⽅法?

如果两个对象相等,则 hashcode ⼀定也是相同的。两个对象相等,对两个对象分别调⽤ equals ⽅法都返回
true。反之,两个对象有相同的 hashcode 值,它们也不⼀定是相等的 。因此,equals ⽅法被覆盖过,则hashCode⽅法也必须被覆盖。

hashCode() 的默认⾏为是对堆上的对象产⽣独特值。如果没有重写 hashCode() ,则该 class 的两个对象⽆论如何都不会相等(即使这两个对象指向相同的数据)

为什么两个对象有相同的 hashcode 值,它们也不⼀定是相等的?

因为可能会碰撞, hashCode() 所使⽤的散列算法也许刚好会让多个对象传回相同的散列值。越糟糕的散列算法越容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的 hashCode )。

第四题. Java 是值传递,还是引⽤传递?

Java 语⾔是值传递。Java 语⾔的⽅法调⽤只⽀持参数的值传递。当⼀个对象实例作为⼀个参数被传递到⽅法中时,参数的值就是对该对象的引⽤。对象的属性可以在被调⽤过程中被改变,但对对象引⽤的改变是不会影响到调⽤者的。

JVM 的内存分为堆和栈,其中栈中存储了基本数据类型和引⽤数据类型实例的地址,也就是对象地址。

⽽对象所占的空间是在堆中开辟的,所以传递的时候可以理解为把变量存储的对象地址给传递过去,因此引⽤类型也是值传递。

在这里插入图片描述

第五题 深拷贝和浅拷贝?

在这里插入图片描述
因此深拷⻉是安全的,浅拷⻉的话如果有引⽤类型,那么拷⻉后对象,引⽤类型变量修改,会影响原对象

浅拷⻉如何实现呢?

Object 类提供的 clone()⽅法可以⾮常简单地实现对象的浅拷⻉。

深拷⻉如何实现呢?

  • 重写克隆⽅法:重写克隆⽅法,引⽤类型变量单独克隆,这⾥可能会涉及多层递归。
  • 序列化:可以先将原对象序列化,再反序列化成拷⻉对象。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1444859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx与history路由模式:刷新页面404问题

使用nginx部署前端项目,路由模式采用history模式时,刷新页面之后,显示404。 路由模式 前端路由的基本作用为: ①当浏览器地址变化时,切换页面; ②点击浏览器后退、前进按钮时,更新网页内容&…

【python】网络爬虫与信息提取--requests库

导学 当一个软件想获得数据,那么我们只有把网站当成api就可以 requests库:自动爬取HTML页面,自动网络请求提交 robots协议:网络爬虫排除标准(网络爬虫的规则) beautiful soup库:解析HTML页面 工具&…

使用Cargo创建、编译与运行Rust项目

在 Rust 开发中,Cargo 是一个非常重要的工具,它负责项目的构建、管理和依赖管理。以下是如何使用 Cargo 创建、编译和运行 Rust 项目的详细步骤。 1. 创建新项目 首先确保你已经在计算机上安装了 Rust 和 Cargo。然后,在命令行中输入以下命…

美比特币ETF持仓跨越20万枚BTC大关,成为华尔街有史以来最受欢迎的ETF!

号外:教链内参2.10《内参:BTC真的存在春节模式吗?》 自SEC在2024年1月份一口气批准了十多支比特币现货ETF之后,机构们“不待扬鞭自奋蹄”,在吸收客户上使出浑身解数,激烈竞争。贝莱德(IBIT&…

基于微信小程序的在线课堂的研究与实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【Linux】信号保存与信号捕捉处理

信号保存与信号捕捉 一、信号保存1. 信号的发送2. 理解信号保存(1)信号保存原因(2)信号保存概念 3. 信号保存系统接口(1)sigset_t(2)sigprocmask()(3)sigpend…

【机器学习】支持向量机(SVM)

支持向量机(SVM) 1 背景信息 分类算法回顾 决策树 样本的属性非数值 目标函数是离散的 贝叶斯学习 样本的属性可以是数值或非数值目标函数是连续的(概率) K-近邻 样本是空间(例如欧氏空间)中的点目标函…

《统计学简易速速上手小册》第9章:统计学在现代科技中的应用(2024 最新版)

文章目录 9.1 统计学与大数据9.1.1 基础知识9.1.2 主要案例:社交媒体情感分析9.1.3 拓展案例 1:电商销售预测9.1.4 拓展案例 2:实时交通流量分析 9.2 统计学在机器学习和人工智能中的应用9.2.1 基础知识9.2.2 主要案例:预测客户流…

CSS基础---新手入门级详解

CSS:层叠样式表 CSS&#xff08;Cascading Style Sheets,层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档添加样式&#xff08;字体、间距和颜色&#xff09;的计算机语言&#xff0c;css扩展名为.css。 实例: <!DOCTYPE html><html> <head><…

自然语言处理(NLP)—— 基本概念

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和语言学领域的一个分支&#xff0c;它涉及到计算机和人类&#xff08;自然&#xff09;语言之间的相互作用。它的主要目标是让计算机能够理解、解释和生成人类语言的数据。NLP结…

二十、K8S-1-权限管理RBAC详解

目录 k8s RBAC 权限管理详解 一、简介 二、用户分类 1、普通用户 2、ServiceAccount 三、k8s角色&角色绑定 1、授权介绍&#xff1a; 1.1 定义角色&#xff1a; 1.2 绑定角色&#xff1a; 1.3主体&#xff08;subject&#xff09; 2、角色&#xff08;Role和Cluster…

树莓派编程基础与硬件控制

1.编程语言 Python 是一种泛用型的编程语言&#xff0c;可以用于大量场景的程序开发中。根据基于谷歌搜 索指数的 PYPL&#xff08;程序语言流行指数&#xff09;统计&#xff0c;Python 是 2019 年 2 月全球范围内最为流行 的编程语言 相比传统的 C、Java 等编程语言&#x…

文章页的上下篇功能是否有必要?boke112百科取消上下篇功能

也不知道是从什么时候开始&#xff0c;我们很多站长的博客网站文章页都会在文末添加上“上一篇”和“下一篇”功能&#xff0c;目的是进行站内SEO优化和方便用户阅读上下篇文章。 boke112百科不管是以前使用的Three主题还是现在使用的YIA主题&#xff0c;刚开始的文章页都是有…

微信,支付宝在线换钱平台系统源码

探索全新、全开源的在线换钱系统源码&#xff0c;它将以前所未有的方式改变您的支付体验。我们为您精心打造了一个集简单易用与安全高效于一身的优质产品&#xff0c;它采用最新的技术开发&#xff0c;为您带来前所未有的便捷与安心。 这款在线换钱系统源码设计直观&#xff0…

【hcie-cloud】【27】华为云Stack网络安全防护

文章目录 前言网络安全概述常见网络攻击类型流量型攻击DDoS单包攻击网络攻击防范 网络安全服务华为云Stack网络防护HCS租户网络纵深防护HCS常用网络安全防护服务对比 云防火墙详述云防火墙&#xff08;CFW&#xff09;- 定义云防火墙&#xff08;CFW&#xff09;- 实现原理云防…

Days28 ElfBoard 板]修改开机动画

1.可能需要安装的库 elfubuntu:~/work/psplash$ sudo apt-get install build-essential libncurses5-dev elfubuntu:~/work/psplash$ sudo apt-get install libtool elfubuntu:~/work/psplash$ sudo apt-get install gettext elfubuntu:~/work/psplash$ sudo apt-get install l…

Linux--基础开发工具篇(2)(vim)(配置白名单sudo)

目录 前言 1. vim 1.1vim的基本概念 1.2vim的基本操作 1.3vim命令模式命令集 1.4vim底行命令 1.5 异常问题 1.6 批量注释和批量去注释 1.7解决普通用户无法sudo的问题 1.8简单vim配置 前言 在前面我们学习了yum&#xff0c;也就是Linux系统的应用商店 Linux--基础开…

Redis核心技术与实战【学习笔记】 - 30.番外篇:Redis学习资料、运维说明及使用规范建议

1.Redis学习资料 虽然前面已经学习了 Redis 理论和技术点&#xff0c;但是如果想要持续提升自己的技术能力&#xff0c;还是需要不断丰富自己的知识体系。本章&#xff0c;给你推荐几本优秀的书籍&#xff0c;以及拓展知识面的其他资料。 1.1 经典书籍 在学习 Redis 时&…

python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

Python程序一直在window后台进程运行

CMD命令执行方法 windows 后台运行并输出日志文件 命令&#xff1a; python qipa250.py >> qipa250_logs.log 2>&1 & 窗口关闭后程序也就关闭了 windows 前台运行并输出日志文件 命令&#xff1a; pythonw qipa250.py >> qipa250_logs.log 2>&a…