介绍
String是最广泛使用的Java类之一,本文提供了有关String的一些实践问题和答案,以帮助您为面试做准备。
您还可以尝试 Java String Quiz来测试您对‘String’类的知识。
Java 中的 String 类型是什么? String 是一种数据类型吗?
String是Java中的一个类,在java.lang的包中定义的,它不是一个原始的数据类型,如int和long。String类代表字符串。String在几乎所有Java应用中都被用来使用。String在Java中是不可变的和最终的,JVM使用一个字符串池来存储所有String对象。
如何在Java中创建一个String对象?
您可以使用新运算符创建一个字符串对象,也可以使用双引文创建一个字符串对象。
1String str = new String("abc");
2String str1 = "abc";
在字符串类中有几个构建器可用于从char array,byte array,StringBuffer和StringBuilder中获取字符串。
当您使用双引用创建一个String时,JVM 会在 String 池中查看其他任何String是否存储相同值。如果String已经存储在池中,JVM 会返回该String对象的引用。如果新String不在池中,JVM 会创建一个新的String对象,并将其存储在字符串池中。当您使用新操作员时,JVM 会创建String对象,但不会将其存储在字符串池中。
写一个 Java 方法来检查输入字符串是否是一个 palindrome。
例如,‘aba’ 是一个 palindrome 字符串.‘String’ 类不提供任何方法来扭转字符串,但‘StringBuffer’ 和‘StringBuilder’ 类有一个 ‘reverse()’ 方法,您可以使用它来检查字符串是否是一个 palindrome。
1private static boolean isPalindrome(String str) {
2 if (str == null)
3 return false;
4 StringBuilder strBuilder = new StringBuilder(str);
5 strBuilder.reverse();
6 return strBuilder.toString().equals(str);
7}
有时,面试者可能会要求你不要使用任何其他类来检查一个符串,在这种情况下,你可以从两端对字符串进行比较,以确定它是否是一个符串。
1private static boolean isPalindromeString(String str) {
2 if (str == null)
3 return false;
4 int length = str.length();
5 System.out.println(length / 2);
6 for (int i = 0; i < length / 2; i++) {
7 if (str.charAt(i) != str.charAt(length - i - 1))
8 return false;
9 }
10 return true;
11}
写一个 Java 方法,将从字符串对象中删除一个特定的字符。
重要的是要注意的是,‘replaceAll()’接受‘String’作为参数,所以你可以使用‘字符’类来创建一个字符串,然后用它来用一个空的字符串代替所有字符。
1private static String removeChar(String str, char c) {
2 if (str == null)
3 return null;
4 return str.replaceAll(Character.toString(c), "");
5}
如何在Java中创建一个String上方或下方案例?
您可以使用String类toUpperCase和toLowerCase方法在所有上方或下方情况下获取String对象. 这些方法具有接受Locale参数的变量,并使用给定局域的规则将字符串转换为上方或下方情况。
什么是String subSequence方法?
Java 1.4 引入了CharSequence界面,而String类实现了这个界面,这就是为什么String类具有subSequence方法的原因。
如何在Java程序中比较两个字符串?
JavaString实现了比较界面,该界面有compareTo()方法的两种变体。compareTo(String anotherString)方法将String对象与String语法上通过的参数进行比较。如果String对象先于通过的参数,则返回负整数,如果String对象跟随通过的参数,则返回正整数。当String对象具有相同值时,它返回零。在这种情况下,equals(String str)方法也返回true。compareToIgnoreCase(String)方法与第一个相似,除非它忽略了案例。它使用Comparator和CASE_INSITIVE_ORDERER进行
如何在Java中将一个字符串转换为字符串?
一个字符串对象是字符串的序列,所以你不能将其转换为单个字符。你可以使用charAt方法来获取该字符在给定的索引中,或者你可以使用toCharArray()方法将字符串转换为字符串。
如何在Java中将String转换为字节数组?
您可以使用getBytes()方法将一个String对象转换为字节数组,您可以使用构建器new String(byte[] arr)将一个字节数组转换为String对象。
您可以在 Java 中使用 switch case 的「String」吗?
Java 7 将交换场景的功能扩展到Strings;早期 Java 版本不支持此功能. 如果您正在为字符串实现条件流,则可以使用 if-else 条件,如果您正在使用 Java 7 或更高版本,则可以使用交换场景。
写一个Java程序来打印一个字符串的所有转换。
例如,AAB的转换为AAB,ABA和BAA。你还需要使用Set来确保没有重复值。 了解更多关于(/community/tutorials/permutation-of-string-in-java)。
写一个Java函数来查找给定的字符串中最长的palindrome。
了解更多有关如何找到(/社区/教程/最长的palindrome-substring-string-java)字符串中最长的palindrome字符串。
如何在Java中区分String,StringBuffer和StringBuilder?
在Java中,一个String对象是不可变的和最终的,所以每次你操纵一个String对象,它就会创建一个新的String对象。
StringBuffer和StringBuilder是可变的类别。StringBuffer操作是线程安全和同步的,而StringBuilder操作不是线程安全。你应该在多线程环境中使用StringBuffer,并在单线程环境中使用StringBuilder。
了解更多有关 [StringBuffer、StringBuffer 和 StringBuilder 之间的区别]( / 社区 / 教程 / string-vs-stringbuffer-vs-stringbuilder)和 [StringBuffer 和 StringBuilder] 的基准( / 社区 / 教程 / string-vs-stringbuffer-vs-stringbuilder)。
为什么在Java中String是不可变的?
String在Java中是不可变的,因为它提供了几个好处:
它增加了安全性,因为任何黑客都无法改变其值,它被用来存储敏感信息,如数据库用户名或密码
- 由于
String是不可变的,它是安全的在多线程使用,你不需要任何同步 - 字符串在Java类加载器中使用,不可变性确保正确的类被
ClassLoader类加载
了解更多关于 为什么‘String’在Java中是不可变的。
如何在Java中分割一个字符串?
您可以使用「split(String regex)」將「String」分割為基於所提供的正規表現的「String」數列。
为什么在Java中储存密码的字符数列优于字符串?
一个字符串对象在Java中是不可变的,并存储在字符串池中。一旦创建,它将留在字符串中,直到垃圾收集完成,所以即使你完成了密码,它仍可在内存中存储更长时间。 这是一个安全风险,因为任何有访问内存垃圾的人都可以找到密码作为清晰的文本。
如何在Java中检查两个字符串是否相等?
有两种方法可以检查两个字符串是否等同. 您可以使用 == 操作员或 equals() 方法. 当您使用 ==操作员时,它会检查String的值以及对象参考。 通常在 Java 编程中,您只想检查String值的等同性。 在这种情况下,您应该使用equals() 方法来检查两个 Strings 是否等同。
1String s1 = "abc";
2String s2 = "abc";
3String s3 = new String("abc");
4
5System.out.println("s1 == s2 ? " + (s1 == s2)); //true
6System.out.println("s1 == s3 ? " + (s1 == s3)); //false
7System.out.println("s1 equals s3 ? " + (s1.equals(s3))); //true
Java 中的 String Pool 是什么?
字符串池是存储在 Java 堆积内存储的字符串对象的集合。字符串是 Java 中的一个特殊类,您可以使用新运算器以及在双引文中提供值来创建一个字符串对象。
Java 的 String intern() 方法是什么?
当内部()方法被召唤时,如果池中已经包含一个相当于这个字符串对象的字符串,如等于(对象)方法所确定,那么从池中返回的字符串。
String在Java中是安全的吗?
一个字符串对象是不可变的,所以你不能在创建后更改其值。这使得字符串对象是安全的,所以它可以在多字符串的环境中安全地使用。
为什么String是Java中流行的HashMap密钥?
由于一个字符串对象是不可变的,它的哈希代码在创建时被缓存,不需要重新计算,这使得它成为地图中的关键候选人,因为其处理速度比其他HashMap关键对象更快。
猜测结果
通过猜测以下Java代码片段的输出来测试自己。
1public class StringTest {
2
3 public static void main(String[] args) {
4 String s1 = new String("digitalocean");
5 String s2 = new String("DIGITALOCEAN");
6 System.out.println(s1 = s2);
7 }
8
9}
(详情输出)
1DIGITALOCEAN
输出是DIGITALOCEAN,因为代码将String s2的值分配给String s1。=是一个分配运算器,在格式(x = y)中分配y到x的值。
1public class Test {
2
3 public void foo(String s) {
4 System.out.println("String");
5 }
6
7 public void foo(StringBuffer sb) {
8 System.out.println("StringBuffer");
9 }
10
11 public static void main(String[] args) {
12 new Test().foo(null);
13 }
14
15}
(详情输出)
1Test.java:12: error: reference to foo is ambiguous
2 new Test().foo(null);
3 ^
4 both method foo(String) in Test and method foo(StringBuffer) in Test match
此代码会导致编译时间错误,因为两个foo方法都有相同的名称,而main中的foo方法的调用将通过null。编译器不知道要调用哪种方法。你也可以参考 方法X对于Y类型的错误是模糊的。
1String s1 = new String("abc");
2String s2 = new String("abc");
3System.out.println(s1 == s2);
(详情输出)
1false
输出是假的,因为代码使用新运算器来创建字符串对象,所以它是在堆积内存中创建的,而s1和s2将具有不同的参考。
1String s1 = "abc";
2StringBuffer s2 = new StringBuffer(s1);
3System.out.println(s1.equals(s2));
(详情输出)
1false
输出是false,因为s2不是类型的String。在String类中的equals()方法实现有一个instanceof运算符来检查通过对象的类型是否是String,如果对象不是String,则返回 false。
1String s1 = "abc";
2String s2 = new String("abc");
3s2.intern();
4System.out.println(s1 == s2);
(详情输出)
1false
输出是false。intern()方法从字符串池中返回String对象引用,但是代码不会将其分配回s2,并且在s2和s1中没有变化,并且s2具有不同的对象引用。
以下代码创建了多少个String对象?
1String s1 = new String("Hello");
2String s2 = new String("Hello");
[详细解答 答案是三个。第1行中的代码在字符串池中创建一个具有值的‘Hello’的‘String’对象(第一个对象),然后创建一个具有值的‘Hello’的新‘String’对象(第2个对象)。第2行中的代码在字符串池中创建一个具有值的‘Hello’的新‘String’对象(第3个对象),并从字符串池中重复使用‘Hello’字符串。
结论
在本文中,您审查了一些关于String的Java面试问题。
推荐阅读:**
[Java 编程问题]( / 社区 / 教程 / Java 编程 - 面试 - 问题) [ Java 编程中的字符串程序]( / 社区 / 教程 / 字符串程序 - 在 Java)