面试十大常见Java String问题

本文介绍Java中关于String最常见的10个问题:

1. 字符串比较,使用 "==" 还是 equals() ?
简单来说, "==" 判断两个引用的是不是同一个内存地址(同一个物理对象).
而 equals 判断两个字符串的值是否相等.
除非你想判断两个string引用是否同一个对象,否则应该总是使用 equals()方法.
如果你了解 字符串的驻留 ( String Interning ) 则会更好地理解这个问题

2. 对于敏感信息,为何使用char[]要比String更好?
String是不可变对象, 意思是一旦创建,那么整个对象就不可改变. 即使新手觉得String引用变了,实际上只是(指针)引用指向了另一个(新的)对象.
而程序员可以明确地对字符数组进行修改,因此敏感信息(如密码)不容易在其他地方暴露(只要你用完后对char[]置0).

3. 在switch语句中使用String作为case条件?
从 JDK7 开始,这是可以的,啰嗦一句,Java 6 及以前的版本都不支持这样做.

[java] view plaincopy

  1. // 只在java 7及更高版本有效!
  2. switch (str.toLowerCase()) {
  3. case "a":
  4. value = 1;
  5. break;
  6. case "b":
  7. value = 2;
  8. break;
  9. }

4. 转换String为数字
对于非常大的数字请使用Long,代码如下

[java] view plaincopy

  1. int age = Integer.parseInt("10");
  2. long id = Long.parseLong("190"); // 假如值可能很大.

5. 如何通过空白字符拆分字符串
String 的 split()方法接收的字符串会被当做正则表达式解析,
"\s"代表空白字符,如空格" ",tab制表符"\t", 换行"\n",回车"\r".
而编译器在对源代码解析时,也会进行一次字面量转码,所以需要"\\s".

[java] view plaincopy

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

6. substring()  方法内部是如何处理的?
在JDK6中,substring()方法还是共用原来的char[]数组,通过偏移和长度构造了一个"新"的String。
想要substring()取得一个全新创建的对象,使用如下这种方式:

[java] view plaincopy

  1. String sub = str.substring(start, end) + "";

当然 Java 7 中,substring()创建了一个新的char[] 数组,而不是共用.

想要了解更多,请参考:  JDK6和JDK7中substring()方法及其差异

7. String vs StringBuilder vs StringBuffer
StringBuilder 是可变的,因此可以在创建以后修改内部的值.
StringBuffer 是同步的,因此是线程安全的,但效率相对更低.

8. 如何重复拼接同一字符串?
方案1: 使用Apache Commons Lang 库的 StringUtils 工具类.

[java] view plaincopy

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

方案2:

使用 StringBuilder 构造. 更灵活.

[java] view plaincopy

  1. String src = "name";
  2. int len = src.length();
  3. int repeat = 5;
  4. StringBuilder builder = new StringBuilder(len * repeat);
  5. for(int i=0; i<repeat; i++){
  6. builder.append(src);
  7. }
  8. String dst = builder.toString();

9. 如何将String转换为日期?

[java] view plaincopy

  1. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  2. String str = "2013-11-07";
  3. Date date = format.parse(str);
  4. System.out.println(format.format(date));//2013-11-07

10. 如何统计某个字符出现的次数?
同样使用Apache Commons Lang 库 StringUtils  类:

[java] view plaincopy

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

更多

如何检测一个字符串全是小写字母?

转自:http://blog.csdn.net/renfufei/article/details/14448147

原文地址:https://www.cnblogs.com/shizhijie/p/8258620.html

时间: 2024-10-09 08:17:38

面试十大常见Java String问题的相关文章

Go开发中的十大常见陷阱[译]

原文: The Top 10 Most Common Mistakes I've Seen in Go Projects 作者: Teiva Harsanyi 译者: Simon Ma 我在Go开发中遇到的十大常见错误.顺序无关紧要. 未知的枚举值 让我们看一个简单的例子: type Status uint32 const ( StatusOpen Status = iota StatusClosed StatusUnknown ) 在这里,我们使用iota创建了一个枚举,其结果如下: Stat

Android 应用中十大常见 UX 错误

[核心提示] Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 App,在评测如此之多的应用之后,他们总结出了10个最常见的错误. 作为一个长期使用 Android 的用户,我在使用 Android 应用的时候经常遇到各种各样的交互上的问题,并且早就想整理它们写一篇文章了.但是由于懒惰和拖延,这篇文章一直处于草稿的状态.正巧,这期 ADiA 中,Android 开发团队为我们着重强调了当下 Android 应用中很常见的,应该避免的错误. Andro

Android开发面试经——4.常见Java基础笔试题

关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44403041 因为Androd使用Java语言来编程的,所以我们做Android开发全面的掌握Java基础是必须的.在面试的过程中,我们发现很多公司发的笔试题有很多知识点都是Java的,搞安卓久了,Java基础的一些知识点也都快忘了,今天就让我们来一起复习一些Java基础,希望能在面试中用到: 1.Overload和Override的区别.Overloaded的方法是

Android开发面试经——4.常见Android进阶笔试题(更新中...)

Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44301359 上一篇文章我们已经了解了Android笔试的一些基础题目, [<Android开发面试经——2.常见Android基础笔试题> ] (http://blog.csdn.net/finddreams/a

java面试(2)--大数据相关

第一部分.十道海量数据处理面试题 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^32个IP.同样可以采用映射的方法, 比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大 的几个)及相应的频率.然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求. 或者如下阐述(雪域之鹰)

Java十大低级错误

前言 本文档根据java开发人员在编码过程中容易忽视或经常出错的地方进行了整理,总结了十个比较常见的低级错误点,方便大家学习. Java十大低级错误 不能用"=="比较两个字符串内容相等. 对list做foreach循环时,循环代码中不能修改list的结构. 日志和实际情况不一致:捕获异常后没有在日志中记录异常栈. 魔鬼数字. 空指针异常. 数组下标越界. 将字符串转换为数字时没有捕获NumberFormatException异常. 对文件.IO.数据库等资源进行操作后没有及时.正确进

Java开发者必备十大学习网站

作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站.以下本人收集的Java开发者必备的网站,这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题.面试问题等,或许你会认为有些网站适合任何水平的开发者,但是我认为:对于Java开发大牛来说,网站的好坏取决于如何使用它们. Stack overflow Stack overflow.com 可能是编程界中最流行的网站了, 是一个与程序相关的IT技术问答网站,用户可以在网站免费提交问题,浏览问题,索引相

JAVA基础——Arrays工具类十大常用方法

Arrays工具类十大常用方法 原文链接:http://blog.csdn.net/renfufei/article/details/16829457 0. 声明数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a",

Java数组的十大方法

Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a","b",