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

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

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

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

  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,代码如下

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

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

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

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

  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 工具类.

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

方案2:

使用 StringBuilder 构造. 更灵活.

  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转换为日期?

  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  类:

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

更多

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

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

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

  1. 十大常见Java String问题

    翻译人员: 铁锚 翻译时间: 2013年11月7日 原文链接: Top 10 questions of Java Strings 本文介绍Java中关于String最常见的10个问题: 1. 字符串比 ...

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

    原文: The Top 10 Most Common Mistakes I've Seen in Go Projects 作者: Teiva Harsanyi 译者: Simon Ma 我在Go开发中 ...

  3. 十大常见web漏洞及防范

    十大常见web漏洞 一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了 ...

  4. Android 应用中十大常见 UX 错误

    [核心提示] Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 App,在评测如此之多的应用之后,他们总结出了10个最常见的错误. 作为一个长期使用 An ...

  5. ios审核过程十大常见被拒问题

    欢迎加入ios马甲包经验交流群,群聊号码:744520623 2018年伊始,苹果并没有因为新年的气氛而对CP们“网开一面”.频繁锁榜.调整排名规则以及关键词覆盖算法……不断抛出的大动作,让CP们叫苦 ...

  6. Android 应用中十大常见 UX 错误 分类: H1_ANDROID 2013-09-21 13:59 404人阅读 评论(0) 收藏

    转载自:http://www.apkbus.com/android-5661-1.html 摘要: Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 Ap ...

  7. 【面试必备】常见Java面试题大综合

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...

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

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  9. 浅析十大常见排序(含C++代码)

    首先声明一下,本文只对十种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的 了解可以参考以下资料: 1.<data structure and algor ...

随机推荐

  1. 基于.NET的轻量级微信SDK

    一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的xml消息在组装成实体类,所以会比较臃肿,现 ...

  2. CHAPTER ONE LOAD-BALANCING

    1.1 Synopsis In this part, we will explain how to create a load-balancer withnginxfor a lot of OpenE ...

  3. 安装Drupal7.12+Postgresql9.1(Ubuntu Server 12.04)

    怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ OS环境准备 这次是从OS开始安装的.最开始装Ubuntu12.04这里就不再赘述, 唯 ...

  4. MATLAB 的通用命令

    MATLAB 的通用命令 1.MATLAB 的标点符号及其特殊功能. 2.MATLAB 的键盘按键及其特殊功能. ↑或者Ctrl+p:调用上一次的命令 ↓或者Ctrl+n:调用下一行的命令 ←或者Ct ...

  5. 用jQuery和PHP来实现转盘抽奖程序

    准备工作 首先要准备素材,抽奖的界面用到两张图片,圆盘图片和指针图片,实际应用中可以根据不同的需求制作不同的圆盘图片. 接着制作html页面,实例中我们在body中加入如下代码: <div cl ...

  6. 神技do{}while(false)

    神技do{}while(false) do{}while(false)或者说do{}while(0),本人在linux源码中学得,起初看起来比较奇怪,但在处理连续流程中特别有用,例如ABC三个流程,A ...

  7. windows服务器下配置memcache最大内存值

    windows服务器下修改memcache配置要求如下: 1.用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务放在192.168.1.168的服务器上 2.修 ...

  8. mac下使用QuickTime录屏及上传youku注意事项

    一,解决QuickTime录屏不能带声音的问题: mac下使用QuickTime屏幕 Soundflower->Audio Setup->soundflower(2ch),在其上鼠标右键, ...

  9. Redis源码之String操作

    0.前言 String操作是Redis操作中最基本的类型,包含get,set,mget,mset,append等等.下面我们会具体分析下一些命令的详细流程,特么简单的命令没有列出. 1.SET命令 2 ...

  10. python-class(3)

    #!/usr/bin/env python #-*- coding:utf-8 -*- ############################ #File Name: class3.py #Auth ...