Java全栈经典面试题剖析4】JavaSE高级 -- 包装类,String, 类方法

news2024/10/22 16:40:00

目录

面试题3.1  什么是自动装箱与拆箱?用什么方式来装箱与拆箱?

面试题3.2  int和Integer有什么区别?

面试题3.3  Integer常量池

面试题3.4  字符串常量池

面试题3.5  这句代码创建了几个对象?  String str1 = new String("xyz");

面试题3.6  String和StringBuffer的区别?StringBuffer和StringBuilder区别?

面试题3.7  String是基本数据类型吗?我可不可以写个类继承于String?

面试题3.8  数字转字符有多少种方式,分别是什么

面试题3.9  数组中有没有length()方法,String中有没有length()方法?

面试题3.10  ==和equals的区别?

面试题3.11  为什么要有hashCode?

面试题3.12  hashCode的作用是什么

计算hashCode的计算方法

面试题3.13  采用Hash的好处,什么是碰撞(不同对象可能算出同一哈希值)

面试题3.14  有没有可能两个不相等的对象有有相同的 hashcode?

面试题3.15  两个相同的对象会有不同的hashcode吗?可以在hashcode()中使用随机数字吗?

面试题3.16  hashCode()与equals()的相关规定

面试题3.17  hashcode和equals的区别


面试题3.1  什么是自动装箱与拆箱?用什么方式来装箱与拆箱?

【技术难度: 2    出现频率: 1 】

一:

自动拆箱就是将基本数据类型自动转换成对应的包装类对象,自动拆箱就是将包装类对象自动转换为基本数据类型。

二:

自动拆箱在需要一个包装类但传入了一个对应的基本类型时发生。

自动拆箱可以在包装类型和基本类型比较大小时、包装类型参与运算时、三目运算符中使用包装类型时发生。

自动装箱:valueOf()当数值i在 -128 ~ 127 之间时 会从cache缓冲区中取出对应的Integer对象当数值不在这个范围内时会new一个新的Integer对象
自动拆箱:intValue()直接把Integer类保存的返回

面试题3.2  int和Integer有什么区别?

【技术难度:  1   出现频率:1  】

1.int是基本数据类型Integer是引用类型数据,Integer是int的包装类,具有类的性质,有自己的属性和方法。

2.Integer变量必须实例化后才能使用,int变量不需要;

3.Integer变量存的是对象的引用,int变量是直接存储数据值;

4.Integer变量的默认值是null,int变量的默认值是0。

拓:简单说一下包装类和原生类。
原生类:就是基本数据类型 比如:int 不具有类的特征(属性和方法)默认值是0
包装类:是java根据基本类型做封装 目的是让基本类型具有类的特征(让其拥有自己的属性和方法)

面试题3.3  Integer常量池

【技术难度: 1    出现频率:1  】

Integer自动装箱时,会使用valueOf()方法,-128~127之间的值直接从该包装类的常量数组(cache缓冲区)中获取现成对象。

面试题3.4  字符串常量池

【技术难度:   2  出现频率: 1】

1. jdk1.7之前字符串常量池在方法区,jdk1.7后在堆中(这一变化的主要原因是方法区的内存空间较小,而堆空间相对较大,可以更好地容纳字符串常量池。)

2. ""声明的字符串对象,保存在字符串常量池中;

3. 用""声明字符串时,如果能在字符串常量池中找到直接返回内存地址,如果不能就创建字符串返回内存地址。(所以:System.out.println("123" == "123");//true)

面试题3.5  这句代码创建了几个对象?  String str1 = new String("xyz");

【技术难度:2     出现频率:1  】

2个,"xyz"在字符串常量池,new String()在堆中。Str1在局部变量表中。

面试题3.6  String和StringBuffer的区别?StringBuffer和StringBuilder区别?

【技术难度: 2    出现频率:1  】

1.String是不可变的,对String类对象的任何改变都会返回一个新的String对象,另外两个类是可变的,对他们的内容修改都是当前这个对象;

2.String类重写了equals()和hashcode()方法另外两个类没有重写

3.双引号创建的String字符串保存在字符串常量池,其他是在堆中创建对象;

4.StringBuffer是线程安全的,StringBuilder是非线程安全的,不考虑线程安全使用StringBuilder效率更高。

5.String,Stringbuilder,StringBuffer的底层都是一个char[],但是String的char[]使用了final进行修饰。

6.Stringbuilder,StringBuffer提供了修改字符串的append()方法

在Java中,String、StringBuilder和StringBuffer都用于处理字符串,但它们之间有一些关键的区别。

不可变性:

String:字符串在Java中是不可变的。这意味着每当你对字符串进行操作(如连接、替换等),都会生成一个新的字符串对象,而原始字符串保持不变。这种不可变性提供了线程安全,但可能导致大量的中间对象创建,这在处理大量字符串操作时可能会导致性能问题。

StringBuilder和StringBuffer:这两者都是可变的,允许你在不创建新对象的情况下修改字符串。这通常可以提高处理大量字符串操作的性能。

线程安全性:

String:由于其不可变性,String自然是线程安全的。

StringBuilder:不是线程安全的。它应该只在单线程环境中使用,以避免并发修改导致的问题。

StringBuffer:是线程安全的。它的方法(如append()、insert()等)都是同步的,这意味着在多线程环境中,你可以安全地使用它而不用担心数据不一致。

性能:

对于简单的字符串操作,String可能足够快,并且由于其不可变性,它在某些情况下(如字符串常量)是理想的选择。

对于需要大量字符串连接或修改的场景,StringBuilder通常比String更高效,因为它避免了不必要的对象创建和垃圾收集。

StringBuffer在性能上通常略低于StringBuilder,因为它需要同步,这增加了额外的开销。但是,如果你在多线程环境中工作,并且需要线程安全,那么这种开销是值得的。

用途:

String:适用于不需要修改的字符串操作,如日志记录、简单的文本处理等。

StringBuilder:适用于单线程环境中需要大量字符串连接或修改的场景,如构建复杂的SQL查询、生成动态HTML等。

StringBuffer:适用于多线程环境中需要线程安全的字符串操作。

面试题3.7  String是基本数据类型吗?我可不可以写个类继承于String?

【技术难度:2     出现频率:1  】

不是,String是引用类型;String是final修饰的类,不可被继承。
String\StringBuilder\StringBuffer都是最终类(被final修饰)不能被继承。

面试题3.8  数字转字符有多少种方式,分别是什么

【技术难度: 1    出现频率:1  】

1.String.valueOf(123);//String类的valueOf()方法。

2.""+123;

3.Integer.toString(123)。//包装类的toString()方法。

面试题3.9  数组中有没有length()方法,String中有没有length()方法?

【技术难度:1     出现频率: 1 】

数组没有lenth()方法,有lenth属性,String中有length()方法

面试题3.10  ==和equals的区别?

【技术难度: 2    出现频率:2  】

1.对于==来说,如果两边是基本数据类型做的是值的比较,如果两边是引用数据类型做的是内存地址的比较;

2.Object类的equals()方法,默认是使用==判断2个对象的内存地址是否相等,重写以后按照自定义规则比较2个对象;

3.基本类型只能用==,没有equals()方法。

面试题3.11  为什么要有hashCode?

面试题3.12  hashCode的作用是什么

【技术难度:2     出现频率:1  】

  1. 生成对象的散列码:通过hashcode()可生成对象的散列码(一个32位的整型),散列码可作为对象的一种特征标识,在底层为哈希表的集合中,可用来快速定位对象。
  2. 提高查找和检索效率,在底层为散列的集合中,通过哈希码,可以快速定位到对象可能存在的位置(O(1)时间复杂度),从而显著减少查找所需要的时间。
  3. 通过hashcode可以快速判断对象的重复性;
计算hashCode的计算方法:

Integer类型的hashcode \ string类型的hashcode \ 对象类型的hashcode

面试题3.13  采用Hash的好处,什么是碰撞(不同对象可能算出同一哈希值)

【技术难度:  2   出现频率:1  】

1.Hash算法可以将把任意长度数据变换成固定长度的标志,此标志和源数据每个字节都有紧密关系并很难找到逆向规律,使用Hash算法可以提高空间利用率、数据查询效率等;

2.不同对象可能算出同一哈希值,这种现象称碰撞(或称哈希冲突)。

面试题3.14  有没有可能两个不相等的对象有有相同的 hashcode?

【技术难度:2     出现频率:1  】

可能会相同,因为哈希算法存在哈希冲突的问题,对不同的内容可能算出同一哈希值,这可能导致两个不同对象的hashCode相同。 

面试题3.15  两个相同的对象会有不同的hashcode吗?可以在hashcode()中使用随机数字吗?

【技术难度: 2    出现频率:1  】

如果是Java中自带的hashcode方法就不会。
可以这么写,但不推荐。根据java底层规范和标准,不允许发生这样的情况,对象相等应保证他们的hashcode相等,否则会导致使用hash的对象发生错误。

面试题3.16  hashCode()与equals()的相关规定

【技术难度: 2    出现频率: 1 】

第一层:

1.如果两个对象相等,hashcode⼀定相等,而且对两个对象分别调用equals()方法都应返回true;

2.若两个对象的hashcode相等,两个对象不⼀定相等;

3.若需重写,必须一起重写equals()和hashCode()方法,保证对象equals()相等的情况下,hashcode也要相等;

第二层:

4.hashCode()默认用对象内存地址计算一个哈希值,equals() 默认用==比较2个对象的内存地址是否相等,如果没有重写这两个方法,则该类的两个不同地址的对象无论如何都不会相等(即使这两个对象的属性是相同的数据)。

面试题3.17  hashcode和equals的区别

【技术难度:2     出现频率:1  】

hashCode()默认用对象内存地址计算并返回一个整型值,不同内存地址可能算出相同的hashcode (哈希冲突),equals()默认用==比较2个对象的内存地址是否相等。

简单说:

两个对象equals()相等,hashcode()一定相等

两个对象equals()不相等,hashcode()可能相等

两个对象的hashcode()不相等,equals()一定不相等


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

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

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

相关文章

前端拦截302重定向

背景: 根据业务场景需要拦截302做后续的逻辑处理 尝试一: : axios拦截 、、、、、async created() {// 获取302请求返回的location后手动修改video的src路径let targetSrc;try {await axios.get(this.video).then((res) > {const { headers, status } res;const { locat…

Android 图片相识度比较(pHash)

概述 在 Android 中,要比对两张 Bitmap 图片的相似度,常见的方法有基于像素差异、直方图比较、或者使用一些更高级的算法如 SSIM(结构相似性)和感知哈希(pHash)。 1. 基于像素的差异比较 可以逐像素比较…

学习笔记——Test.pwn

前言:笔者也才接触Pwn,写这篇wp,记录目前所得感悟、思考、理解等。 存在错误,或者解释不通的地方,还请提出,已补足笔记的缺陷。 Pwn是什么? 我Pwn掉了你的电脑、我Pwn掉了你的设备…… 通俗的…

重庆大学软件工程考研,难度如何?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重大软件专业可谓是最好上岸的985院校!重庆大学24考研各大学院复试录取情况已出, 我们先说学硕部分: 招生人数: 重庆大学软件工程学硕近几年计划统招人数都不多&#xf…

入选ECCV 2024!浙江大学联合微软亚洲研究院提出统一医学图像预训练框架UniMedI,打破医学数据异构化藩篱

让 AI 在某些条件下具备类似人类的反应能力,从而代替人类高效地从事特定工作,是 AI 领域研究人员孜孜不倦的追求。正如在医学图像和人工智能的交叉领域,基于视觉语言预训练的深度模型 (Visual-Language Pre-training, VLP) 凭借其自动化的特点…

Docker本地镜像发布到阿里云镜像服务的简易指南

1 阿里云容器镜像服务 阿里云容器镜像服务(Alibaba Cloud Container Registry,简称ACR)是一个为容器镜像、Helm Chart等云原生资产提供安全托管及高效分发的平台。它支持多架构容器镜像,包括Linux、Windows、ARM等,以…

心觉:感恩日记:每天5分钟,重新定义你的人生

​Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作207/1000天 你是否觉得生活节奏太快,总是有做不完的事、解决不完的问题? 有一个简单的方法,…

DEPT_ DECOMPOSED PROMPT TUNING FOR PARAMETER-EFFICIENT FINE-TUNING

论文汇总 当前的问题 (1)Prompt Tuning通常收敛缓慢,并且对初始化敏感; (2)Prompt Tuning延长了输入序列的总长度,从而加剧了计算需求(即训练/推理时间和内存成本),这是由于Transformer的二次复杂度(Vaswani et al, 2017)。 解…

机器视觉系统硬件组成之工业相机篇

工业相机是一种非常重要的机器视觉器件,它能够将被采集的图像信息通过电路转换成电信号,再通过模数转换器(ADC)将其转化为数字信号,最后以标准的视频信号输出。工业相机在机器视觉领域得到了广泛应用,包括质…

springboot055服装生产管理的设计与实现(论文+源码)_kaic

毕业设计(论文) 协力服装厂服装生产管理系统 的设计与实现 学生姓名 XXX 学 号 XXXXXXXX 分院名称 XXXXXXXX 专业班级 XXXXX 指导教师 XXXX 填写…

CROss PlatformS (CROPS) 与 Docker

CROPS 是一个开源的、跨平台的开发框架,专为利用 Docker 容器在 Windows、macOS 和 Linux 系统上创建和管理构建主机而设计。它简化了在非 Linux 系统上运行 Yocto 项目及其他基于 Linux 的工具的过程,同时提供了一个可扩展的开发环境,支持多…

基于vue框架的的地铁站智慧管理系统的设计n09jb(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,上班打卡,下班打卡,人员管理,交接班,视频巡检,车辆巡检,车辆管理 开题报告内容 基于Vue框架的地铁站智慧管理系统的设计开题报告 一、研究背景与意义 随着城市化进程的加速,地铁站作为城市交通系统的重要组成部分&am…

全能型选手视频播放器VLC 3.0.21 for Windows 64 bits支持Windows、Mac OS等供大家学习参考

全能型选手视频播放器,支持Windows、Mac OS、Linux、Android、iOS等系统,也支持播放几乎所有主流视频格式。 推荐指数: ★★★★★ 优点: ◆、界面干净简洁,播放流畅 ◆、支持打开绝大多数的文件格式,包…

用Aconvert.com将MOBI文件转换为PDF:一步步指南

在今天的数字时代,文件格式转换是日常办公和学习中常见的需求之一。MOBI格式的电子书文件在某些设备上不太方便阅读,而PDF格式则更加通用。本文将为你详细介绍如何使用Aconvert.com将MOBI文件转换为PDF文件。 1. 访问Aconvert.com 首先,打开…

装修公司行业通用的小程序源码系统 让装修公司实现信息智能化 带完整的安装代码包以及搭建部署教程

系统概述 装修公司行业通用的小程序源码系统是一款专门为装修公司设计的智能化解决方案。它基于先进的技术架构,结合装修行业的特点和需求,为装修公司提供了全方位的业务支持和管理功能。 该系统通过小程序的形式呈现给用户,方便客户随时随…

MacOS13虚拟机VMware Workstation Pro 16安装

资源 安装unlocker 安装虚拟机 低版本的还没有MacOS13选项,这也是我安装低版本虚拟机踩过的坑 找个教程安装就可以了 省略…自己去找找教程… 过程中我使用桥接是不行的,没有网络,后面重新下一步一步的选择默认的网络重装后就好了&am…

基于yolov10的驾驶员抽烟打电话安全带检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv10的驾驶员抽烟、打电话、安全带检测系统是一种先进的驾驶行为监测系统。该系统利用YOLOv10算法的高效性和准确性,实现对驾驶员行为的实时检测与识别。 YOLOv10是一种最新的实时物体检测模型,其通过深度学习技术,如卷…

如何看ip属于什么地址

在数字化时代,IP地址作为互联网通信的基石,扮演着至关重要的角色。无论是网络管理、安全防护,还是日常的网络访问,理解IP地址的性质和分类都是必不可少的技能。本文将深入探讨如何判断一个IP地址属于哪一类地址,并详细…

Java项目-基于springboot框架的校园医疗保险管理系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

Spring Boot整合Stripe订阅支付指南

在当今的在线支付市场中,Stripe 作为一款一体化的全球支付平台,因其易用性和广泛的支付方式支持,得到了许多企业的青睐。本文将详细介绍如何在 Spring Boot 项目中整合 Stripe 实现订阅支付功能。 1.Stripe简介 Stripe 是一家为个人或公司提…