版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
String高频面试题及详细答案(实战版)1、String是什么?有什么核心特性?答案:String是Java中表示字符串的类,属于引用类型,位于java.lang包下。核心特性主要有三点:1.不可变性:字符串一旦创建,内容就不能被修改。我们平时做的拼接、替换等操作,都不是修改原字符串,而是生成一个全新的字符串对象。2.常量池缓存:字面量方式创建的字符串,会优先存入字符串常量池复用,减少重复对象创建,节省内存。3.线程安全:因为内容不可修改,多线程同时读取不会出现数据竞争问题,天然线程安全。补充:JDK9之前String底层用char[]存储字符,JDK9及之后改用byte[]存储,根据字符编码自动适配,进一步节省内存。2、为什么String是不可变的?底层怎么保证的?答案:从底层源码层面,有三层保障:1.类被final修饰:String类是final类,不能被继承,避免子类重写方法破坏不可变性。2.存储数组被final修饰:底层存储字符的数组(char[]/byte[])是privatefinal修饰,数组引用地址不可修改,无法指向新数组。3.无对外修改方法:String没有提供任何可以直接修改底层数组的公开方法,所有增删改操作都是新建对象。很多人会误以为final修饰数组就不能改数组内容,其实final只限制引用地址,真正保证不可变的是:私有数组+无修改API+操作必新建对象。3、两种创建字符串方式的区别?(字面量newString)答案:方式一:Strings1="abc";直接使用字面量创建,JVM会先去字符串常量池中查找:-如果常量池已有"abc",直接返回常量池中的对象地址;-如果没有,在常量池中创建该字符串对象,再返回地址。这种方式只会创建0个或1个对象。方式二:Strings2=newString("abc");new关键字一定会在堆内存中创建新对象,同时会触发常量池校验:-先检查常量池是否有"abc",没有则在常量池创建;-再在堆中新建一个String对象,指向常量池中的字符数组。这种方式最少创建1个对象(堆对象),最多创建2个对象(堆+常量池)。核心区别1.字面量优先走常量池,复用对象;new必然新建堆对象,无法复用。2.字面量创建更省内存、效率更高,开发中优先使用。4、==和equals在String中的区别?答案:1.==比较的是对象地址:判断两个字符串是不是同一个对象,比较的是内存地址值。2.equals比较的是字符串内容:String重写了Object的equals方法,会逐字符对比内容是否完全一致,不关注对象地址。经典案例Strings1="abc";Strings2="abc";Strings3=newString("abc");System.out.println(s1==s2);//true(常量池复用,同一地址)System.out.println(s1==s3);//false(s1常量池地址,s3堆地址)System.out.println(s1.equals(s3));//true(内容一致)开发中字符串内容对比必须用equals,绝对不能用==。5、String拼接字符串的底层原理?为什么不推荐频繁+拼接?答案:1.普通常量拼接(编译期优化)Strings="a"+"b"+"c";编译期会直接优化为Strings="abc";只会创建一个常量池对象,效率很高。2.变量拼接(运行期执行)Strings1="a";Strings2=s1+"b";运行期底层会自动创建StringBuilder,调用append拼接,最后toString返回新字符串。频繁+拼接的弊端循环中频繁使用+拼接,每次循环都会新建StringBuilder对象+新建String对象,产生大量临时垃圾对象,造成内存浪费、GC频繁,性能极差。所以循环拼接场景,必须手动使用StringBuilder/StringBuffer。6、String、StringBuilder、StringBuffer的区别?答案:1.可变性-String:不可变,每次修改生成新对象。-StringBuilder、StringBuffer:可变,底层数组可扩容修改,不会新建对象。2.线程安全-StringBuffer:所有方法加了synchronized锁,线程安全,多线程场景可用。-StringBuilder:无锁,线程不安全,多线程并发会出现数据覆盖问题。3.性能StringBuilder>StringBuffer>StringStringBuilder无锁开销,性能最高;StringBuffer有锁,性能稍低;String频繁修改性能最差。4.使用场景-字符串内容固定不变:用String-单线程频繁拼接修改:用StringBuilder-多线程频繁拼接修改:用StringBuffer7、String的intern()方法作用?答案:intern()方法的核心作用:主动将字符串放入常量池,并返回常量池中的对象地址。执行逻辑:1.调用intern()时,先判断字符串常量池是否存在内容相同的字符串;2.如果存在,直接返回常量池中的对象地址;3.如果不存在,将当前字符串内容存入常量池,再返回地址。适用场景:大量重复字符串的业务场景,比如状态码、枚举文本、用户标签等,用intern()可以极大节省内存,避免大量重复堆对象。注意:JDK1.7之后,常量池移至堆内存,intern()不会重复创建对象,性能更优。8、字符串常量池的特点?存在哪里?答案:存储位置演变-JDK1.6及之前:字符串常量池存在方法区(永久代)-JDK1.7及之后:字符串常量池移至堆内存-JDK1.8:永久代被元空间替代,常量池仍在堆中核心特点1.唯一性:常量池中不会存在内容重复的字符串;2.自动复用:字面量创建自动缓存,减少对象创建;3.可手动存入:通过intern()方法主动缓存自定义字符串。9、String为什么不适合大量拼接、不适合做key?(高频坑点)答案:1.不适合大量拼接String不可变,每次拼接都会生成新对象,大量拼接会产生海量临时对象,占用内存、增加GC压力,性能极低。2.适合做HashMap的key很多人会误解,其实String是最适合做HashMapkey的类型之一。原因:-不可变,创建后hash值固定,不会因为对象修改导致hash地址变化;-重写了equals和hashCode方法,对比逻辑规范,不会出现匹配异常。反而是可变类型不适合做key,会导致数据丢失、查询不到的问题。10、null和空字符串""的区别?答案:1.null:表示字符串变量没有指向任何对象,是空引用,调用任何字符串方法(equals、length等)都会直接报空指针异常。2.""空字符串:表示变量指向一个真实存在的空内容字符串对象,有对象地址,只是内容为空,可以正常调用方法,length结果为0。业务判空最佳写法//先判null,再判空串,避免空指针if(str!=null&&!"".equals(str)){}//工具类最简写法(推荐)StringUtils.isNotBlank(str)11、newString()创建的字符串是什么?答案:newString()会创建一个空内容的字符串对象,等价于"",不是null。Strings=newString();System.out.println(s);//空串System.out.println(s.length());//0System.out.println(s==null);//false开发中禁止使用newString()创建空字符串,直接用""即可,节省堆内存开销。12、字符串不可变,那replace()方法是怎么回事?答案:replace()、substring()、trim()、toUpperCase()等
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人教版小学语文四年级上册第10单元课后练习题及答案
- 2026年浙江省家政服务员职业资格考试服务流程专项训练习题集及答案
- 四川大学电气工程学院2026年管理岗院聘制招聘(2人)考试备考题库及答案解析
- 广安市前锋区林业发展服务中心招聘见习生(2人)笔试备考试题及答案解析
- 2026青岛澳西智能科技有限公司招聘笔试参考题库及答案解析
- 宜宾市三中高新学校2026年下半年第一次公开考核招聘合同制教师(30人)考试备考题库及答案解析
- 2026年乙酸柏木酯行业洞察报告及未来五至十年发展趋势报告
- 2026西安交通大学人文学院招聘副教授2人笔试参考题库及答案解析
- 2026年缝制机械制造行业市场前景报告及未来五至十年产业链安全与韧性提升
- 2026年二壬基萘磺酸钡行业洞察报告及未来五至十年发展趋势报告
- 施工方案审查监理实施细则
- 大型机械设备运行路线及作业位置承载能力校核方案
- 新教科版 三年级上册 《天气》单元 第 8课《天气的影响》 教学课件
- 聚丙烯(PP)原材料MSDS报告(PPH-T03牌号)
- 企业负责人带班检查记录表
- 2026全球劳动力市场洞察报告
- 大米类生产企业管理制度
- 《铁道概论》课件 8-1 认知电气化铁路
- 长征主题课件
- 韵达快递运输合同协议
- 糖尿病血糖管理
评论
0/150
提交评论