java面试-java基础(下)

文章目录

  • 一、==和equals区别?
  • 二、hashcode方法作用?两个对象的hashCode方法相同,则equals方法也一定为true吗?
  • 三、为什么重写equals方法就一定要重写hashCode方法?
  • 四、Java中的参数传递时传值呢还是传引用?
  • 五、深拷贝和浅拷贝?
  • 六、Java中创建对象的几种方式?
  • 七、Java对象初始化过程?(笔试)
  • 八、怎么精确表示任意精度的整数和任何精度的定点数或者货币?
  • 九、String是Java基本数据类型吗?可以被继承吗?
  • 十、String是不可变类吗?字符串拼接是如何实现的?
  • 十一、不同String创建方法分别创建了几个对象?
  • 十二、String为什么是不可变的?设计原因?
  • 十三、String、StringBuilder、StringBuffer 的区别?
  • 总结


一、==和equals区别?

  • ==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的对象是引用数据类型,则比较的是对象的地址值是否相等
  • equals方法:没有重写相当于==,重写后比较两个对象的内容是否相等。String、Integer重写了

二、hashcode方法作用?两个对象的hashCode方法相同,则equals方法也一定为true吗?

  • hashCode 方法主要用来获取对象的哈希码,哈希码是由对象的内存地址或者对象的属性计算出来的,它是⼀个int类型的整数,重复率低,因此可以用来作为键值对的键,以提高查询效率。
  • 不一定。因为存在哈希冲突,不同的对象可能会有相同的哈希值,所以哈希值相等,并不一定能equals方法相等。为了解决哈希冲突的问题,在判断对象是否相等时,不仅会比较键对象的哈希码,还会使用 equals 方法。如果两个对象的哈希码相同,但通过equals方法比较结果为 false,那么这两个对象就不被视为相等。

三、为什么重写equals方法就一定要重写hashCode方法?

  • 保证在equals相同的情况下hashcode值必定相同:如果只重写equals方法,那么被认为相等的对象可能会有不同的哈希码(默认是对象的地址,因此所有对象都是不同的哈希码),存储在集合不同的位置,导致集合出现重复元素或者无法找到对应元素(因为equals是根据对象的特征进行重写)
  • 提升性能:hashCode能提高hashmap等集合去重的性能,如果没有重写hashCode()方法,那么集合每次添加元素都要遍历已有元素调用equals方法,性能太差,重写hashcode能减少equals方法调用次数

四、Java中的参数传递时传值呢还是传引用?

  • java基本类型作为参数被传递时是值传递;引用类型作为参数被传递时也是值传递,参数值是对象的引用。

五、深拷贝和浅拷贝?

  • 浅拷贝仅拷贝被拷贝对象的基本数据类型变量的值和引用数据类型变量的地址值,而对于引用类型变量指向的堆中的对象不会拷贝
  • 深拷贝完全拷贝一个对象,拷贝被拷贝对象的成员变量的值,堆中的对象也会拷贝一份。
  • 浅拷贝需要实现Cloneable接口并重写Object类中的clone()方法;
  • 深拷贝需要实现Serializable接口,通过对象的序列化和反序列化,或者使所有引用类型属性实现Cloneable接口

六、Java中创建对象的几种方式?

  • 使用new关键字
A a = new A();
  • 使用Class类的newInstance方法,Class.forName.newInstance()
Class clazz = Class.forName("A");
A a = (A) clazz.newInstance();
  • 使用clone方法
A a = new A();
A a2= (A) a.clone();
  • 反序列化,比如调用ObjectInputStream类的readObject()方法
A a= new A();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
oos.writeObject(a);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
A a2 = (A) ois.readObject();

七、Java对象初始化过程?(笔试)

  • 父类静态属性
  • 父类静态代码块
  • 子类静态属性
  • 子类静态代码块
  • 父类非静态属性
  • 父类构造代码块
  • 父类构造方法
  • 子类非静态属性
  • 子类构造代码块
  • 子类构造方法

八、怎么精确表示任意精度的整数和任何精度的定点数或者货币?

  • BigInteger任意精度的整数
  • BigDecimal任何精度的定点数->货币
  • 转成分用int运算

九、String是Java基本数据类型吗?可以被继承吗?

  • 引用类型,String被final修饰不能被继承

十、String是不可变类吗?字符串拼接是如何实现的?

  • String是不可变的,1.8以前+的拼接操作,如果字符串在常量池中不存在,则会生成新的对象。1.8时被优化为基于StringBuilder的append方法进行处理

十一、不同String创建方法分别创建了几个对象?

String str1 = "abc";//1
String str2 = new String("abc")//2 
  • 1在内存的字符串常量池中存储abc字符串对象
  • 2在内存的字符串常量池中找abc字符串对象,没有则创建;在堆中创建str2对象,引用指向abc字符串对象

十二、String为什么是不可变的?设计原因?

  • 不可变:一旦String对象被创建,它所包含的字符串内容是不可改变的。
  • 不可变是因为引用的char数组(jdk1.9后改为byte数组)被final修饰。字符串的值本身不能改变,但引用字符串的变量中记录的地址值是可以改变的。每次修改操作(如拼接、替换等)都会产生新对象。
  • 避免内存浪费:当创建一个String对象时,如果字符串值在常量池中已经存在则不会创建,只是引用已经存在的对象
  • 性能优化:字符串不变性保证了hash码的唯一性,允许String对象缓存频繁使用的HashCode(如HashMap),不必每次都去计算新的哈希码
  • 安全性:String被许多的Java类用来当做参数,例如:网络连接地址URL、文件路径path、反射机制的String参数等, 如果String不是固定不变的,将会引起各种安全隐患。

十三、String、StringBuilder、StringBuffer 的区别?

  • String:类的对象是不可变的;适用于字符串内容不经常改变的场景。在使用字符串常量或进行少量的字符串操作时使用。每次对String对象进行修改操作(如拼接、替换等)实际上都会生成一个新的String对象,而不是修改原有对象。大量字符串连接情况下,产生太多对象浪费内存。线程安全
  • StringBuilder:适用于单线程环境下需要频繁修改字符串内容的场景,比如在循环中拼接或修改字符串,使用字符数组char[]保存字符串,可变类,每次对String对象进行修改操作(如拼接、替换等)都是直接在原有字符串对象的底层数组上进行,不产生新对象,线程不安全;效率高
  • StringBuffer:适用于多线程环境下需要频繁修改字符串内容的场景,使用字符数组char[]保存字符串,可变类,方法加同步锁synchronized,线程安全;效率低
  • 多线程强制使用StringBuilder()
public class StringBuilderHolder {
    private final StringBuilder sb;
    
    public StringBuilderHolder(int capacity) {
        sb = new StringBuidler(capacity);
    }
    //3.避免重复构造String,重用StringBuilder
    public StringBuilder resetAndGetStringBuilder() {
        sb.setLength(0);
        return sb;
    }
}
//2.ThreadLocal避免多线程冲突
private static final ThreadLocal<StringBuilderHolder> threadLocalStringBuilderHolder = new ThreadLocal<StringBuilderHolder>() {
    protected StringBuilderHolder initialValue() {
        //1.设置好初始长度,超过char[]默认16调用System.arraycopy成倍复制扩容太浪费资源
        return new StringBuilderHolder(256);
    }
}

StringBuilder sb = threadLocalStringBuilderHolder.get().resetAndGetStringBuilder();

总结

本文介绍了的java面试之java基础(下),如有问题欢迎私信和评论

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

时间、查找、打包、行过滤与指令的运行——linux指令学习(二)

前言&#xff1a;本节内容标题虽然为指令&#xff0c;但是并不只是讲指令&#xff0c; 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法&#xff0c; 很抱歉&#xff0c; 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的&#xff0c;…

如何确保 PostgreSQL 在高并发写操作场景下的数据完整性?

文章目录 一、理解数据完整性二、高并发写操作带来的挑战三、解决方案&#xff08;一&#xff09;使用合适的事务隔离级别&#xff08;二&#xff09;使用合适的锁机制&#xff08;三&#xff09;处理死锁&#xff08;四&#xff09;使用索引和约束&#xff08;五&#xff09;批…

系统学习ElastricSearch(一)

不知道大家在项目中是否使用过ElastricSearch&#xff1f;大家对它的了解又有多少呢&#xff1f;官网的定义&#xff1a;Elasticsearch是一个分布式、可扩展、近实时的搜索与数据分析引擎。今天我们就来揭开一下它的神秘面纱&#xff08;以下简称ES&#xff09;。 ES 是使用 J…

uniapp零基础入门Vue3组合式API语法版本开发咸虾米壁纸项目实战

嗨&#xff0c;大家好&#xff0c;我是爱搞知识的咸虾米。 今天给大家带来的是零基础入门uniapp&#xff0c;课程采用的是最新的Vue3组合式API版本&#xff0c;22年发布的uniappVue2版本获得了官方推荐&#xff0c;有很多同学等着我这个vue3版本的那&#xff0c;如果没有学过vu…

CH12_函数和事件

第12章&#xff1a;Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些&#xff1f;Javascript中的各个循环特点是什么&#xff1f;Javascript中的各个循环语法分别是什么&#xff1f;…

网页封装APP:让您的网站变身移动应用

网页封装APP&#xff1a;让您的网站变身移动应用 随着移动设备的普及&#xff0c;越来越多的人开始使用移动设备浏览网站。但是&#xff0c;传统的网站设计并不适合移动设备的屏幕尺寸和交互方式&#xff0c;这导致了用户体验不佳和流失。 有没有办法让您的网站变身移动应用&…

【ROS2】初级:客户端-编写一个简单的服务和客户端(Python)

目标&#xff1a;使用 Python 创建并运行服务节点和客户端节点。 教程级别&#xff1a;初学者 时间&#xff1a;20 分钟 目录 背景 先决条件 任务 1. 创建一个包2. 编写服务节点3. 编写客户端节点4. 构建并运行 摘要 下一步 相关内容 背景 当节点通过服务进行通信时&#xff0c…

【项目日记(一)】梦幻笔耕-数据层实现

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.前言2.后端模块3数据库设计4.mapper实现4.1UserInfoMapper4.2BlogMapper 5.总结 1.…

机器学习筑基篇,​Ubuntu 24.04 快速安装 PyCharm IDE 工具,无需激活!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 快速安装 PyCharm IDE 工具 描述&#xff1a;虽然在之前我们安装了VScode&#xff0c;但是其对于使用Python来写大型项目以及各类配置还是比较复杂的&#xff0c;所以这里我们还是推…

U盘非安全拔出后的格式化危机与数据拯救策略

在数字化时代&#xff0c;U盘作为便捷的数据携带工具&#xff0c;其重要性不言而喻。然而&#xff0c;许多用户在日常使用中往往忽视了安全退出的重要性&#xff0c;直接拔出U盘后再插入时可能会遭遇“需要格式化”的提示&#xff0c;这一状况不仅令人措手不及&#xff0c;更可…

YOLOv9报错:AttributeError: ‘list‘ object has no attribute ‘view‘

报错信息如下&#xff1a; red_distri, pred_scores torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split( AttributeError: ‘list’ object has no attribute ‘view’ 解决方法&#xff1a; 去yolov9/utils/loss_tal.py把167行代码更改&#…

Android最近任务显示的图片

Android最近任务显示的图片 1、TaskSnapshot截图1.1 snapshotTask1.2 drawAppThemeSnapshot 2、导航栏显示问题3、Recentan按键进入最近任务 1、TaskSnapshot截图 frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java frameworks/base/cor…

Blazor SPA 的本质是什么以及服务器端渲染如何与 Blazor 的新 Web 应用程序配合使用

Blazor 通常被称为单页应用程序 (SPA) 框架。当我第一次开始使用 Blazor 时&#xff0c;我对 SPA 的含义、组件如何为 SPA 架构做出贡献以及所有这些如何与交互性联系在一起感到困惑。 今天&#xff0c;我将解答大家可能关心的三个问题&#xff1a; 什么是 SPA&#xff1f;了…

Sentinel-1 Level 1数据处理的详细算法定义(一)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程&#xff0c;以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

14-42 剑和诗人16 - 如何从一个技术人员到CTO再到投资人的角色转变

​​​​​​ 我清楚地记得我的职业轨迹发生转变的那个关键时刻。当时&#xff0c;我正向整个执行领导团队和董事会成员介绍我们部门的技术路线图&#xff0c;感到说服这些有影响力的利益相关者资助一系列雄心勃勃的计划的压力。我知道他们的支持&#xff08;和资金&#xff09…

英语学习交流小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;每日打卡管理&#xff0c;备忘录管理&#xff0c;学习计划管理&#xff0c;学习资源管理&#xff0c;论坛交流 微信端账号功能包括&#xff1a;系统首页&#xff0c;学习资源&…

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍 边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中&#xff0c;边缘点通常标志着不同表面或物体的分界&#xff0c;或者是物体表面上的不规则性&#xff0c;如裂缝、棱角、突起等。点云边缘检测的作用非常重要&#xff0c;最常见是进行特征点…

应用监控SkyWalking调研

参考&#xff1a; 链路追踪( Skyworking )_skywalking-CSDN博客 企业级监控项目Skywalking详细介绍&#xff0c;来看看呀-CSDN博客 SkyWalking 极简入门 | Apache SkyWalking 使用 SkyWalking 监控 ClickHouse Server | Apache SkyWalking https://zhuanlan.zhihu.com/p/3…

45 mysql truncate 的实现

前言 truncate 是一个我们也经常会使用到的命令 其作用类似于 delete from $table; 但是 他会比 delete 块很多&#xff0c;这里我们来看一下 它的实现 delete 的时候会逐行进行处理, 打上 删除标记, 然后 由后台任务 进行数据处理 truncate table 的实现 执行 sql 如下 …

【测试专题】软件总体计划方案(2024原件word)

测试目标&#xff1a;确保项目的需求分析说明书中的所有功能需求都已实现&#xff0c;且能正常运行&#xff1b;确保项目的业务流程符合用户和产品设计要求&#xff1b;确保项目的界面美观、风格一致、易学习、易操作、易理解。 获取&#xff1a;软件全套文档过去进主页。 一、…