关于Java字符串的几个常见问题

栏目:Java8基础 作者:admin 日期:2018-10-21 评论:0 点击: 437 次

列举几个关于Java字符串的常见问题并给出答案。


1. 如何比较两个字符串?用"=="还是"equals"?
"=="对比的是引用是否相同(是否同一个对象)
"equals"对比的是值是否相同
除非想要比较两个字符串是否是同一个对象,否则应该一直使用"equals"。

2. 为什么对安全性敏感的信息更喜欢用char[]而不是String来存储?
因为String是不可变对象,这就意味着只要String被创建,它们就会一直存在直到被垃圾回收器收集。因此,用String保存的信息安全性会降低。

3. 在switch语句中可以使用字符串吗?
从Java7开始,可以在switch语句中使用字符串。
switch (aString) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

4. 如何将字符串转为int?
int n = Integer.parseInt("10");
虽然很简单,但是使用频率很高。

5. 如何用空格切分字符串?
String[] strArray = aString.split("\\s+");

6. substring()方法会创建一个新字符串吗?
从Java7开始,substring()方法会创建一个新的char数组,而不是使用已经存在的。
在Java6中,substring()方法不会创建一个新的char数组,如果想创建新的,可以用以下代码:
str.substring(m,n) + "";

7. String vs StringBuilder vs StringBuffer
String是不可变的,StringBuilder和StringBuffer都是可变的。
StringBuffer是同步的,线程安全的,效率低。
StringBuilder是非同步的,非线程安全,效率比StringBuffer高。