10个关于String的⾯试题
下⾯是⾯试中最容易问到的有关String的问题。
1. 如何⽐较两个字符串?使⽤“==”还是equals()⽅法?
简单来讲,“==”测试的是两个对象的引⽤是否相同,⽽equals()⽐较的是两个字符串的值是否相等。除⾮你想检查的是两个字符串是否是同⼀个对象,否则你应该使⽤equals()来⽐较字符串。
如果你知道interning的概念的话,那就更好了。
2. 为什么针对安全保密⾼的信息,char[]⽐String更好?
因为String是不可变的,就是说它⼀旦创建,就不能更改了,直到垃圾收集器将它回收⾛。⽽字符数组中的元素是可以更改的(译者注:这就意味着你就可以在使⽤完之后将其更改,⽽不会保留原始的数据)。所以使⽤字符数组的话,安全保密性⾼的信息(如密码之类的)将不会存在于系统中被他⼈看到。
3. 我们可以针对字符串使⽤switch条件语句吗?
对于JDK 7,回答是肯定的。从JDK 7开始, 我们可以针对字符串使⽤switch条件语句了;在JDK 6或者之前的版本,我们则不能使⽤switch条件语句。
java switch case string
// Java 7或者以后的版本
switch (LowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
4. 如何将字符串转化成int?
1
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()会创建新的字符数组,⽽不是使⽤现存的字符数组。点击查看JDK 6和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包中的peat()⽅法来重复⼀个字符串。
String str = "abcd";
String repeated = peat(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 = untMatches("11112222", "1");
System.out.println(n);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论