Java是最受欢迎的编程语言之一,它具有简单、安全、稳健等特性。
当你准备Java面试时,你会发现在大多数面试中,开始的问题都是关于Java字符串。
在这篇文章中,我将介绍前20个关于Java字符串的面试问题,读完这篇文章后,你将很轻松应对有关Java String相关的面试问题。
1. Java中String是什么?它是一种数据类型吗?
字符串是Java中定义在java.lang包中的一个类。你可以将一连串的字符分配给一个字符串变量。例如,String name = "Gaurav"。
另外,Java中String不是一个像int、char或long那样的数据类型。
当你给String变量分配一个字符序列时,你就是在创建一个字符串对象。
每个字符串字面是一个字符串类的实例,它的值不能被改变。
2. C语言中的字符串和Java中的字符串有什么区别?
如果你的简历中包含与C语言有关的内容,他们可以问你这个问题。
Java和C语言中的字符串是完全不同的。
在C语言中,字符串是一个以null结尾的字符数组。
在下面的图片中,我展示了C语言和Java语言中的字符串的结构。

在Java中,字符串是比较抽象的。
字符串类来自java.lang包,有很多预定义的方法,程序员可以用这些方法对字符串进行操作或获得关于字符串的信息。
因此,在Java中,字符串比C语言的功能更丰富。
3. 什么是Java中的字符串池?
字符串池(String pool)是一种由JVM维护的特殊类型的内存。
字符串池用于存储唯一的字符串对象。
当你将相同的字符串字头分配给不同的字符串变量时,JVM在字符串池中只保存一个字符串对象的副本,并且字符串变量将开始引用该字符串对象。
我在下图中对上述句子进行了图解。

维护这种特殊类型的内存的目的是内存优化。
4. 为什么字符串是不可变的?
在大多数的Java面试中,你会遇到这样的问题。
你认为Java语言设计者为什么要保持字符串的不可变性?
如果你把相同的字符串字面符号分配给许多字符串变量,JVM将在Java字符串池中只保存一份字符串对象,这些变量将开始引用该字符串对象。
如果在这个问题之前没有人问过你关于字符串池的问题,请你介绍一下Java中字符串池概念的背景。请参考前面的问题。
另外,另一个原因是安全。我们知道,几乎每个Java程序都包含字符串,它被用来保存重要的数据,如用户名和密码。所以它不应该在中间被改变。否则,就会出现安全问题。
5. 以下代码将创建多少个对象?
String firstString = "Gaurav";
String secondString = "Gaurav";
String thirdString = new String("Gaurav");
看到上面的代码,只有两个字符串对象将被创建。前两个变量将引用同一个字符串对象,其值为 "Gaurav"。JVM使用字符串池的概念,将重复的字符串对象只存储一份到字符串常量池。
但是,当我们使用new关键字来创建一个新的字符串时,一个新的字符串对象将被创建并存储在Java堆内存中。
所以对于第三个变量thirdString,一个新的字符串对象将被创建并存储在Java堆空间中。
所以总共会有两个对象,一个来自Java字符串池,一个来自Java堆内存。
下面,我在下图中展示了这两个对象。

6. intern()方法的作用是什么?
intern()方法用来将字符串对象的唯一副本手动添加到Java字符串池中。
我们知道,当我们使用new关键字创建一个字符串时,它将被存储在堆内存中。
我们可以使用intern()方法将该字符串对象

最低0.47元/天 解锁文章
577

被折叠的 条评论
为什么被折叠?



