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

目录

面试题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.mzph.cn/diannao/57382.shtml

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

相关文章

C++ 抛异常

目录 一.抛异常与运行崩溃的区别 1.运行崩溃 2.抛异常 二.抛异常机制存在的意义 1.清晰的处理错误 2.结构化的错误管理 3.跨函数传递错误信息 4.异常对象多态性 三.抛异常的使用方法 1.抛出异常 (throw) 2.捕获异常 (catch) 3.标准异常类 四.抛异常的处理机制 1.抛…

【MySQL备份】Percona XtraBackup

这份文档针对的是最新发布的版本:Percona XtraBackup 2.4.29(发布说明)。 Percona XtraBackup是一款针对MySQL系列服务器的开源热备份工具,在备份过程中不会锁定您的数据库。它能够对MySQL 5.1、5.5、5.6和5.7服务器以及带有Xtra…

UDP传输协议Linux C语言实战

文章目录 1.UDP简介1.1特点1.2 UDP协议头部格式1.2.1 **UDP头部**:1.2.2 **头部意义**:1.2.3 **头部参数**: 1.3 UDP数据长度控制1.4 UDP协议建立框架 2. 函数介绍2.1 sendto函数2.2 recvform函数2.3 其他函数 3.实例3.1 通用结构体、IPV4结构…

转置卷积的一些理解

转置卷积 当图像输入到卷积网络中,最终生成的特征图的宽高会减小 在语义分割中标签和原始图像大小一致,若输出宽高减小,不利于标签比对 于是使用转置卷积将图像宽高还原 在卷积的时候,通常输入大于输出,可根据输入大小…

【Linux】waitpid函数 及其 非阻塞等待和阻塞等待

父进程等待子进程结束可以通过两种方式实现:阻塞等待和非阻塞等待。这两种方式各有优缺点,适用于不同的场景。 简单来说: 阻塞等待:先等你,我再继续 非阻塞等待:不等你,我继续做自己的事&…

使用Python实现某易云音乐歌曲下载

前言 在这篇文章中,我们将探讨如何通过Python结合JavaScript代码来逆向网易云音乐的API接口,以获取并下载指定歌曲。请注意,本文仅用于技术学习与交流目的,实际使用时请遵守相关法律法规及服务条款。 目标网站 1. 准备工作 首先,我们需要安装一些必要的库: execjs:用…

NVIDIA RTX 5080移动版GPU真身首曝!全系要用GDDR7

英伟达下一代移动版GPU的神秘面纱似乎正在揭开,Moore’s Law is Dead的最新视频首次曝光了疑似RTX 5080移动版GPU的工程样品照片。 这款工程样品印有N22W-ES-A1,与Clevo的下一代笔记本主板规格表相匹配,表明该芯片确实基于NVIDIA的下一代芯片…

java 提示 避免用Apache Beanutils进行属性的copy。

避免用Apache Beanutils进行属性的copy。 Inspection info: 避免用Apache Beanutils进行属性的copy。 说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。 TestObject a new TestObject(); TestObject b new Te…

Cadence元件A属性和B属性相互覆盖

最近在使用第三方插件集成到Cadence,协助导出BOM到平台上,方便对BOM进行管理和修改,结果因为属性A和属性B不相同,导致导出的BOM错误。如下图: ​​ 本来我们需要导出Q12,结果给我们导出了Q13,或者反之&…

SpringBoot实现的高效民宿预订平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

AWD的复现

学习awd的相关资料:速成AWD并获奖的学习方法和思考记录- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者(包含使用脚本去批量修改密码) 在复现之前去了解了以下AWD的相关脚本 资料:AWD批量攻击脚本使用教程-CSDN博客 …

13_渲染器的设计

目录 渲染器与响应式系统的结合渲染器的基本概念自定义渲染器 渲染器与响应式系统的结合 渲染器与响应式系统是相辅相成的,渲染器负责将响应式系统中的响应式数据渲染到视图中,而响应式系统则负责监听数据的变化并通知渲染器进行更新。 渲染器在浏览器…

大数据-184 Elasticsearch - 原理剖析 - DocValues 机制原理 压缩与禁用

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

在 Docker 中搭建 PostgreSQL16 主从同步环境

1. 环境搭建 本文介绍了如何在同一台机器上使用 Docker 容器搭建 PostgreSQL 的主从同步环境。通过创建互联网络和配置主库及从库,详细讲解了数据库初始化、角色创建、数据同步和验证步骤。主要步骤包括设置主库的连接信息、创建用于复制的角色、使用 pg_basebacku…

成都跃享未来教育咨询有限公司抖音小店新生态

在数字化浪潮席卷全球的今天,教育行业正经历着前所未有的变革与升级。作为一座历史悠久而又充满活力的城市,成都凭借其深厚的文化底蕴和前瞻性的发展眼光,孕育了众多创新型企业。其中,成都跃享未来教育咨询有限公司(以…

计算机专业大学四年的学习路线(非常详细),零基础入门到精通,看这一篇就够了

前言 许多学子选择踏上计算机这条充满挑战与机遇的道路。但在大学四年中,如何规划自己的学习路线,才能在毕业时脱颖而出,成为行业的佼佼者呢? 第一学年:基础知识的奠基 1.1 课程安排 在大学的第一年,重…

spark:Structured Streaming介绍

文章目录 1. Structured Streaming介绍1.1 实时计算和离线计算1.1.1 实时计算1.1.2 离线计算 1.2 有界和无界数据 2. 简单使用3. 编程模型4. 数据处理流程4.1 读取数据Source4.1.1 文件数据处理 4.2 计算操作 Operation4.3 数据输出 Sink4.3.1 输出模式4.3.2 指定输出位置4.3.3…

JVM篇(运行时数据区(实战课程学习总结)

目录 学习前言 一、运行时数据区 1. JVM运行时数据区规范 2. Hotspot运行时数据区 3. 分配JVM内存空间 分配堆的大小 分配方法区的大小 分配线程空间的大小 二、程序计数器 1. 作用 2. 存储的数据 3. 异常 三、Java虚拟机栈 1. 栈帧 1.1. 局部变量表 存储内容 …

【已解决】C# NPOI如何在Excel文本中增加下拉框

前言 上图&#xff01; 解决方法 直接上代码&#xff01;&#xff01;&#xff01;&#xff01;综合了各个大佬的自己修改了一下&#xff01;可以直接规定在任意单元格进行设置。 核心代码方法块 #region Excel增加下拉框/// <summary>/// 增加下拉框选项/// </s…

12. 命令行

Hyperf 的命令行默认由 hyperf/command 组件提供&#xff0c;而该组件本身也是基于 symfony/console 的抽象。 一、安装 通常来说该组件会默认存在&#xff0c;但如果您希望用于非 Hyperf 项目&#xff0c;也可通过下面的命令依赖 hyperf/command 组件。 composer require hype…