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.rhkb.cn/news/457992.html

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

相关文章

【AI大模型】深入解析 存储和展示地理数据(.kmz)文件格式:结构、应用与项目实战

文章目录 1. 引言2. 什么是 .kmz 文件?2.1 .kmz 文件的定义与用途2.2 .kmz 与 .kml 的关系2.3 常见的 .kmz 文件使用场景 3. .kmz 文件的内部结构3.1 .kmz 文件的压缩格式3.2 解压缩 .kmz 文件的方法3.3 .kmz 文件的典型内容3.4 .kml 文件的结构与主要元素介绍 4. 深…

python对文件的读写操作

任务:读取文件夹下的批量txt数据,并将其写入到对应的word文档中。 txt文件中包含:编号、报告内容和表格数据。写入到word当中:编号、报告内容、表格数据、人格雷达图以及对应的详细说明(详细说明是根据表格中的标识那一列中的加号…

安徽对口高考Python试题选:输入一个正整数,然后输出该整数的3的幂数相加形式。

第一步&#xff1a;求出3的最高次幂是多少 guoint(input("请输入一个正整数:")) iguo a0 while i>0: if 3**i<guo: ai break ii-1print(a)#此语句为了看懂题目&#xff0c;题目中不需要打印出最高幂数 第二步…

开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用

一、前言 学习Qwen2-VL &#xff0c;为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野&#xff0c;更让我们站在科技发展的潮头&#xff0c;紧跟时代的步伐。 Qwen2-VL 具有卓越的图…

ELK日志收集

目前&#xff0c;各个微服务系统的日志都保存在各自指定的目录中&#xff0c;如果这些微服务部署在不同的服务器上&#xff0c;那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题&#xff0c;我们可以借助ELK来收集各个微服务系统的日志并集中展…

智能台灯设计(一)原理图设计

1. 前言 作者最近突发奇想&#xff0c;想自己做一个小台灯&#xff0c;设想的功能有&#xff1a;带锂电池可充电、可以调节亮度&#xff0c;后续通过增加WIFI模块实现手机控制开关功能。目前先实现最简单的功能&#xff0c;有时间再一步步完善吧。 2. 原理图设计 充电芯片使用…

B端产品常用组件及设计规则 原型图 Axure原型图 交互设计

B端产品常用组件及设计规则 本作品总结整理了B端产品原型设计时常用的组件、设计指南、常用模板等。为原型设计人员提供实用的组件和指南&#xff0c;帮助他们快速灵活地构建出更加美观、高质量的产品原型&#xff0c;更加高效地完成原型设计工作。 原型演示地址&#xff1a;…

【笔记】软件测试09——接口测试

九、接口测试 一)接口测试的概念 1)接口测试 通过数据包的方式观察客户端向服务器发送了什么请求,模拟这些请求的过程 接口测试是测试系统组件间数据交互的一种方式。 接口测试是通过测试不同情况下的输入参数和与之对应的输出结果来判断接口是否符合或满足相应 的功能性、…

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元

目录 前言 HarmonyOS NEXT&#xff1a;下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 &#xff08;1&#xff09;全维度性能升级 &#xff08;2&#xff…

人工智能进程;算子加速的具体计算部分;大模型GPT5:参数18万亿;大模型面临问题

目录 人工智能进程 算子加速的简单理解,举例说明 一、简单理解 二、举例说明 一、算子加速的具体计算部分 二、举例说明 三、算子加速是否仅针对GPU 大模型GPT5:参数18万亿 大模型面临问题 算力集群设计框架 人工智能进程

论文阅读(二十六):Dual Attention Network for Scene Segmentation

文章目录 1.Introduction3.DANet3.1Position Attention Module3.2Channel Attention Module 论文&#xff1a;Dual Attention Network for Scene Segmentation   论文链接&#xff1a;Dual Attention Network for Scene Segmentation   代码链接&#xff1a;Github 1.Intr…

C++——string的模拟实现(下)

目录 成员函数 3.4 修改操作 (3)insert()函数 (4)pop_back()函数 (5)erase()函数 (6)swap()函数 3.5 查找操作 (1)find()函数 (2)substr()函数 3.6 重载函数 (1)operator赋值函数 (2)其他比较函数 (3)流插入和流提取 完整代码 结束语 第一篇链接&#xff1a;C——…

vue通过JSON文件生成KML文件源码

可以使用封装的json解析器进行JSON数据获取&#xff0c;读取点的经度、维度、高程等数据&#xff0c;再使用对应的KML文件生成函数使用该源码下载KML文件&#xff08;固定KML生成&#xff1a;js模板式生成大疆上云kml文件&#xff08;含详细注释&#xff0c;已封装成函数&#…

unity中GameObject介绍

在 Unity 中&#xff0c;Cube和Sphere等基本几何体是 Unity 引擎的内置预制体&#xff08;Prefabs&#xff09;&#xff0c;它们属于 Unity 中的GameObject 系统&#xff0c;可以在 Unity 的 Hierarchy 视图或 Scene 视图中右键点击&#xff0c;然后在弹出的菜单中选择 3D Obje…

MySQL 数据出海之数据同步方案

优质博文&#xff1a;IT-BLOG-CN 数据库出海流程 【1】业务出海&#xff1a;1&#xff09;数据库出海&#xff1b;2&#xff09;应用出海&#xff1b;3&#xff09;流量分发&#xff1b; 【2】数据库出海&#xff1a;涉及业务方、信安、DBA和框架组。 数据库出海&#xff0c…

Go 语言基础教程:7.Switch 语句

在这篇教程中&#xff0c;我们将学习 Go 语言中的 switch 语句&#xff0c;它是条件分支的重要结构。我们将通过一个示例程序逐步解析 switch 的不同用法。 package mainimport ("fmt""time" )func main() {i : 2fmt.Print("Write ", i, " …

Python画笔案例-094 绘制 神奇彩条动画

1、绘制 神奇彩条动画 通过 python 的turtle 库绘制 神奇彩条动画,如下图: 2、实现代码 绘制 神奇彩条动画,以下为实现代码: """神奇彩条动画.py一个用海龟画图的图章功能配合颜色渐变和动画原理做成的动画。 """ from random import randi…

重学SpringBoot3-Spring WebFlux之SSE服务器发送事件

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ Spring WebFlux之SSE服务器发送事件 1. 什么是 SSE&#xff1f;2. Spring Boot 3 响应式编程与 SSE为什么选择响应式编程实现 SSE&#xff1f; 3. 实现 SSE 的基本步骤3.…

MySQL-32.索引-操作语法

一.语法 二.代码实现 指定某个字段为主键&#xff0c;其实就是建立一个主键索引。而指定某个字段唯一&#xff0c;就是建立一个唯一索引。 -- 索引 -- 创建&#xff1a;为tb_emp表的name字段建立一个索引 create index idx_emp_name on tb_emp(name);-- 查询&#xff1a;查…

Handler、Looper、message进阶知识

Android Handler、Looper、Message的进阶知识 在Android开发中&#xff0c;Handler、Looper和Message机制是多线程通信的核心。为了深入理解并优化它们的使用&#xff0c;尤其是在高并发和UI性能优化中&#xff0c;可以利用一些高级特性。 1. Handler的高阶知识 Handler在基本…