10个有关String的面试问题

下面是面试中最容易问到的有关String的问题。

1. 如何比较两个字符串?使用“==”还是equals()方法?

简单来讲,“==”测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值是否相等。除非你想检查的是两个字符串是否是同一个对象,否则你应该使用equals()来比较字符串。

如果你知道interning的概念的话,那就更好了。

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

因为String是不可变的,就是说它一旦创建,就不能更改了,直到垃圾收集器将它回收走。而字符数组中的元素是可以更改的(译者注:这就意味着你就可以在使用完之后将其更改,而不会保留原始的数据)。所以使用字符数组的话,安全保密性高的信息(如密码之类的)将不会存在于系统中被他人看到。

3. 我们可以针对字符串使用switch条件语句吗?

对于JDK 7,回答是肯定的。从JDK 7开始, 我们可以针对字符串使用switch条件语句了;在JDK 6或者之前的版本,我们则不能使用switch条件语句。

// Java 7或者以后的版本
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

4. 如何将字符串转化成int?

int n = Integer.parseInt("10");

很简单,也经常使用,但经常被忽略。

5. 如何将字符串用空白字符分割开?

我们可以使用正则表达式来做到分割字符。“\s”代表空白字符” “, “\t”, “\r”, “\n”.

String[] strArray = aString.split("\\s+");

6. substring()方法到底做了什么?

在JDK 6中, substring()的做法是,用一个字符数组来表示现存的字符串,然后给这个字符数组提供一个“窗口”,但实际并没有创建一个新的字符数组。要创建一个新的字符串对象由新的字符串数组表示的话,你需要加上一个空字符串,如下所示:

str.substring(m, n) + ""

这会创建一个新的字符数组,用来表示新的字符串。这种方法会让你的代码更快,因为垃圾收集器会收集不用的长字符串,而仅保存要使用的子字符串。

在Oracle JDK 7中,substring()会创建新的字符数组,而不是使用现存的字符数组。

7. String vs StringBuilder vs StringBuffer

String vs StringBuilder: StringBuilder是可变的,这意味着它创建之后仍旧可以更改它的值。 StringBuilder vs StringBuffer: StringBuffer是synchronized的,它是线程安全的的,但是比StringBuilder要慢。

8. 如何重复一个字符串

在Python中,我们可以乘一个数值来重复一个字符串。在Java中,我们可以使用Apache Commons Lang包中的StringUtils.repeat()方法来重复一个字符串。

String str = "abcd";
String repeated = StringUtils.repeat(str,3);
//abcdabcdabcd

9. 如何将字符串转换成时间

String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
//Tue Sep 17 00:00:00 EDT 2013

10. 如何计算一个字符串某个字符的出现次数?

请使用apache commons lang包中的StringUtils:

int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);

我有一个微信公众号,经常会分享一些Java技术相关的干货。如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

1-Java常用工具类-异常

除了自定义类,java中还为我们提供了一系列的工具类。我们会为大家介绍6种最常用的工具类。

1052
来自专栏Java学习网

开发中最常见的Java字符串问题总结

开发中最常见的Java字符串问题总结  1.怎样比较字符串?用”==”还是用equals()?   简单地说,”==”测试两个字符串的引用是否相同,equals...

21410
来自专栏移动开发的那些事儿

JVM的垃圾收集器策略

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存...

1005
来自专栏我的技术专栏

java的finalize()方法与C++的析构函数

1425
来自专栏java一日一条

Swift 中的内存管理详解

这篇文章是在阅读《The Swift Programming Language》Automatic Reference Counting(ARC,自动引用计数)...

431
来自专栏CRPER折腾记

ES6折腾记- 模板字符串

总体来说,模板字符串的出现了,让我们的字符串拼接写的更加优美了;相当简易实用;但是这货并不是万能的,有部分unicode编码字符会造成编译报错

803
来自专栏刘望舒

Java虚拟机(三)垃圾标记算法与Java对象的生命周期

前言 这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法,为了更好的理解根搜索算法,会在文章的最后介绍Java对象在虚拟机中的...

1796
来自专栏技术沉淀

Python: 函数式编程

1384
来自专栏和蔼的张星的图像处理专栏

3. 统计数字暴力破解找规律

计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例: 例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1...

1063
来自专栏个人随笔

ADO.NET查询和操作数据库

stringbuilder 类 stringbuilder类:用来定义可变字符串 stringbulider Append(string value)   在结...

3175

扫码关注云+社区