Java字符串面试题 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Java字符串面试题

Java字符串面试题

更新时间:2020-10-22 17:09:53 来源:极悦 浏览1100次

相信各位想面试程序员的朋友们,在面试前都会做的功课就是java面试题的搜集整理与学习。字符串是在面试中经常出现的题目,算是必考题。关于字符串,我们以前也学习过string字符串以及字符串截取方式等相关知识,下面整理了10道java字符串面试题,里面的内容都是十分基础的,大家可以来检测一下关于java字符串的内容自己掌握的是否全面。

image.png

1、创建String对象的不同方式有哪些?

答:两种方式。一种是通过new很关键字来创建。使用这种方式时,JVM创建字符串对象但不存储在字符串池中,我们可以调用intern()方法将该字符串对象存储在字符串池中,如果该字符串池已经有了同样值得字符串,则返回引用。另一种是使用双引号来直接创建。使用这种方式时。JVM去字符串找有没有相同值的字符串,如果有,则返回找到的字符串引用。否则创建一个新的字符串对象,并存储在字符串池中。


2、什么是String,它是什么数据类型?

答:String是定义在java.lang包下的一个类,它不是基本数据类型。

String是不可变的,JWM使用字符串池来储存所有的字符串对象。


3、如何比较两个字符串?

答:String内部实现了Comparable接口,有两个比较方法:compareTo(String anotherString)和compareToIgnoreCase(String str)。

compareTo(String anotherString)与传入的anotherString字符串进行比较,如果小于传入的字符串返回负数,如果大于则返回正数。当两个字符串值想等时,返回0此时equals方法会返回true。equalsIgnoreCase(String str)该方法与compareTo方法类似,区别只是内部利用了Character.toUpperCase等方法进行了大小转换后进行比较。


4、String、StringBuffer、StringBuilder的区别?

答:String是不可变类,每当我们对String进行操作的时候,总会创建新的字符串。操作String和耗费资源,所以java提供了两个工具类来操作String——StringBuffer和StringBuilder。

StringBuilder和StringBuffer是可变类,StringBuffer是线程安全的,StringBuilder则不是线程安全的。所以在多线程对同一字符串进行操作的时候,我们选择StringBuffer。在不需要处理多线程的情况下,StringBuilder的效率比StringBuffer高。


5、String是不可变的有什么好处?

答:由于String是不可变类,所以在多线程中使用是安全的,我们不需要做其他任何同步操作。String是不可变的,其值也是不可变的,所以用来存储数据密码很安全。因为java字符串不可变,可以在java运行时节省大量堆空间。因为不同的字符串变量可以引用池中的相同的字符串。如果字符串是可变的话,任何一个变量的值改变,就会映射到其他变量,那么字符串池也就没有什么意义了。


6、下面程序的运行结果是什么?

String s1 = "abc";

StringBuffer s2 = new StringBuffer(s1);

System.out.println(s1.equals(s2)); //1,false

StringBuffer s3 = new StringBuffer("abc");

System.out.println(s3.equals("abc")); //2,false

System.out.println(s3.toString().equals("abc")); //3,true

答:注释1打印为false,主要考察String的equals方法,String源码中 equals 方法有对参数进行 instance of String 判断语句,StringBuffer的祖先为CharSequence,所以不相等;注释2打印为false,因为StringBuffer 没有重写Object的equals方法,所以Object的equals方法实现是==判断,故为 false; 注释3打印为true,因为Object的toString方法返回为String类型,String重写了equals方法实现为值比较。


7、为什么针对安全保密高的信息,char[]比String更好?

答:因为String是不可变的,一旦创建就不能更改,直到垃圾收集器将它回收才能消失,即使我们修改了原先的变量,实际上也是在内存中新建一个对象,原数据还是保留在内存中等待回收;而字符数组char[]中的元素是可以更改的,也就是说像密码等保密信息用完之后我们可以马上修改它的值而不留痕迹,从而相对于String有更好的安全性。


8、说说 String str = "hello world"; 和 String str = new String("hello world"); 的区别?

答:在 java的class文件中有专门的部分用来存储编译期间生成的字面常量和符号引用,这部分叫做class文件常量池,在运行期间对应着方法区的运行时常量池,所以String str = "hello world"; 在编译期间生成了 字面常量和符号引用,运行期间字面常量 "hello world" 被存储在运行时常量池(只保存了一份),而通过new关键字来生成对象是在堆区进行的,堆区进行对象生成的过程是不会去检测该对象是否已经存在的,所以通过new来创建的一定是不同的对象,即使字符串的内容是相同的。


9、如何判断两个String是否相等?

答:有两种方式判断字符串是否相等,使用“= = ”或者使用equals方法。当使用 “= =”操作符时,不仅比较字符串的值还比较引用的内存的值。大多相互情况下,我们只需要判断值是否相等,此时用equals方法即可。还有一个用equalsIgnoreCase可以用来忽略大小写进行比较。

image.png


10、如何将String转换为byte array,反过来呢?

答:使用String的getBytes()方法将String转换成byte数组,使用String的构造方法new String(byte[] arr)将byte数据转为String。

public class StringToByteArray{

public static void main(String[] args){

String str="PANKAJ";

byte[] byteArr=str.getBytes();

//print the byte[] elements

System.out.println("String to byte array:"+Array.toString(byteArr))

}

public static void main(String[] args)

{

byte[] byteArray={'P','A','N','k','A','J'};

byte[] byteArray={80,65,78,75,65,74};

String str=new String(byteArray);

Srting str1=new String(byteArray1);

System.out.println(str);

System.out.println(str1);

}

}


以上是今天要学习的java字符串面试题,因为现在的公司越来越看重java程序员的基本能力十分扎实,对java的基础知识考查是十分重视的,所以上面的10道java字符串面试题中涉及的内容希望大家认真学习,遇到不会的及时查漏补缺,为java面试做好准备。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>