Java字符串经典笔试题(含详细答案解析)_第1页
Java字符串经典笔试题(含详细答案解析)_第2页
Java字符串经典笔试题(含详细答案解析)_第3页
Java字符串经典笔试题(含详细答案解析)_第4页
Java字符串经典笔试题(含详细答案解析)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java字符串经典笔试题(含详细答案解析)本套试题聚焦JavaString核心考点,覆盖字符串常量池、不可变性、常用方法、拼接规则、内存问题等面试高频知识点,题型贴合企业笔试真题,答案附带详细解析,适合基础巩固、面试刷题。一、单项选择题(5题)1.以下关于JavaString类的描述,正确的是()A.String是可变类,修改字符串内容不会生成新对象B.String类被final修饰,不能被继承C.使用newString()创建的字符串一定存在常量池D.字符串拼接只会创建一个对象答案:B解析:1.String类被final修饰,核心目的是禁止继承、保证不可变性,规避子类破坏字符串安全特性;2.A错误,String是不可变类,任何修改、拼接操作都会生成新字符串对象;3.C错误,newString()会直接在堆内存创建对象,默认不会进入字符串常量池,除非主动调用intern()方法;4.D错误,普通+拼接字符串,编译后会创建多个中间对象,效率较低。2.执行以下代码,输出结果是()java

Strings1="abc";

Strings2="abc";

System.out.println(s1==s2);A.falseB.trueC.编译报错D.运行异常答案:B解析:直接双引号定义的字符串会进入字符串常量池,JVM会自动复用常量池中的已有对象。s1和s2指向常量池中同一个"abc"对象,地址相同,==比较地址返回true。3.执行以下代码,输出结果是()java

Strings1=newString("java");

Strings2=newString("java");

System.out.println(s1.equals(s2));

System.out.println(s1==s2);A.true、trueB.true、falseC.false、trueD.false、false答案:B解析:1.equals()方法被String重写,比较的是字符串内容,两个字符串内容一致,返回true;2.new关键字每次都会在堆内存创建新对象,s1和s2是两个不同对象,内存地址不同,==比较地址返回false。4.以下字符串拼接方式,效率最高的是()A.循环中使用+拼接字符串B.使用StringBuilder拼接C.使用String拼接D.使用StringTokenizer拼接答案:B解析:String是不可变类,+拼接会不断生成新对象,产生大量内存垃圾;StringBuilder是可变字符序列,底层维护可变数组,拼接时不会创建新对象,效率极高;StringTokenizer仅用于字符串分割,不用于拼接。5.String类中以下方法,返回值类型不是String的是()A.trim()B.substring()C.length()D.replace()答案:C解析:length()方法返回int类型,用于获取字符串长度;trim()去除首尾空格、substring()截取子串、replace()替换字符,均返回String类型。二、填空题(3题)1.Java中字符串常量池存在于______(JDK1.8及以上版本)。答案:堆内存解析:JDK1.7及以上,字符串常量池从方法区移至堆内存;JDK1.8彻底移除永久代,常量池完全存放在堆中。2.String、StringBuilder、StringBuffer中,线程安全的是______,效率最高的是______。答案:StringBuffer、StringBuilder解析:StringBuffer的方法被synchronized修饰,多线程环境下安全但效率稍低;StringBuilder无锁,单线程效率最高;String不可变,不存在线程安全问题但不适合频繁拼接。3.代码Stringstr=null;System.out.println(str.length());运行会抛出______异常。答案:NullPointerException(空指针异常)解析:str为null,未指向任何堆对象,无法调用对象方法,直接触发空指针异常。三、程序输出题(2题,高频易错)1.写出以下代码运行结果,并说明原因java

Strings1="hello"+"world";

Strings2="helloworld";

System.out.println(s1==s2);输出结果:true解析:编译器会对纯常量字符串拼接进行优化,编译阶段直接将"hello"+"world"合并为"helloworld",不会产生运行时拼接过程。s1和s2均指向常量池中的同一个对象,地址相等。2.写出以下代码运行结果,并说明原因java

Strings1="hello";

Strings2=s1+"world";

Strings3="helloworld";

System.out.println(s2==s3);输出结果:false解析:s1是变量,变量与常量拼接无法被编译器优化,运行时会通过StringBuilder拼接生成堆内存新对象;s3是常量池对象,二者内存地址不同,故==返回false。四、简答题(2题,面试高频)1.简述String不可变性的原理,以及不可变性的好处?参考答案:原理:String类被final修饰,无法被继承;底层存储字符的数组value也被final修饰,数组初始化后无法引用新数组,且String没有提供任何修改原有数组内容的方法,所有增删改操作都会生成新字符串对象,原对象始终不变。好处:1.保证常量池复用:字符串不可变,才能实现常量池缓存,节省内存空间;2.保证数据安全:常用于用户名、密码、路径等核心数据,不可变可避免被恶意篡改;3.保证哈希值稳定:String重写了hashCode,不可变特性让哈希值永久不变,适合作为HashMap、HashSet的key;4.线程安全:不可变对象天然支持多线程共享,无需同步锁。2.说一说String的intern()方法作用?参考答案:intern()是String的本地方法,核心作用是手动将字符串对象存入常量池并复用对象。执行逻辑:调用该方法时,JVM会先检查字符串常量池是否存在内容相同的字符串;1.若存在,直接返回常量池中的对象地址;2.若不存在,将当前字符串对象存入常量池,再返回其地址。使用场景:大量重复字符串对象时,通过intern()复用常量池对象,有效节省堆内存空间。五、编程题(实操真题)题目:编写Java方法,实现字符串反转,要求不使用JDK自带的reverse()方法解题思路:将字符串转为字符数组,遍历数组首尾交换元素,最后拼接为新字符串。java

publicclassStringReverse{

//字符串反转方法

publicstaticStringreverse(Stringstr){

//判空处理,避免空指针和空字符串异常

if(str==null||str.length()==0){

returnstr;

}

//字符串转字符数组

char[]chars=str.toCharArray();

intleft=0;

intright=chars.length-1;

//首尾交换

while(left<right){

chartemp=chars[left];

chars[left]=chars[right];

chars[right]=temp;

left++;

right--;

}

//字符数组转字符串返回

returnnewString(chars);

}

//测试方法

publicstaticvoidmain(String[]args){

System.out.println(reverse("abc123"));//输出:321cb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论