面试十大常见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 7及更高版本有效!
- switch (str.toLowerCase()) {
- case "a":
- value = 1;
- break;
- case "b":
- value = 2;
- break;
- }
4. 转换String为数字
对于非常大的数字请使用Long,代码如下
- int age = Integer.parseInt("10");
- long id = Long.parseLong("190"); // 假如值可能很大.
5. 如何通过空白字符拆分字符串
String 的 split()方法接收的字符串会被当做正则表达式解析,
"\s"代表空白字符,如空格" ",tab制表符"\t", 换行"\n",回车"\r".
而编译器在对源代码解析时,也会进行一次字面量转码,所以需要"\\s".
- String[] strArray = aString.split("\\s+");
6. substring() 方法内部是如何处理的?
在JDK6中,substring()方法还是共用原来的char[]数组,通过偏移和长度构造了一个"新"的String。
想要substring()取得一个全新创建的对象,使用如下这种方式:
- 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 工具类.
- String str = "abcd";
- String repeated = StringUtils.repeat(str,3);//abcdabcdabcd
方案2:
使用 StringBuilder 构造. 更灵活.
- String src = "name";
- int len = src.length();
- int repeat = 5;
- StringBuilder builder = new StringBuilder(len * repeat);
- for(int i=0; i<repeat; i++){
- builder.append(src);
- }
- String dst = builder.toString();
9. 如何将String转换为日期?
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- String str = "2013-11-07";
- Date date = format.parse(str);
- System.out.println(format.format(date));//2013-11-07
10. 如何统计某个字符出现的次数?
同样使用Apache Commons Lang 库 StringUtils 类:
- int n = StringUtils.countMatches("11112222", "1");
- System.out.println(n);
更多
转自:http://blog.csdn.net/renfufei/article/details/14448147
面试十大常见Java String问题的更多相关文章
- 十大常见Java String问题
翻译人员: 铁锚 翻译时间: 2013年11月7日 原文链接: Top 10 questions of Java Strings 本文介绍Java中关于String最常见的10个问题: 1. 字符串比 ...
- Go开发中的十大常见陷阱[译]
原文: The Top 10 Most Common Mistakes I've Seen in Go Projects 作者: Teiva Harsanyi 译者: Simon Ma 我在Go开发中 ...
- 十大常见web漏洞及防范
十大常见web漏洞 一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了 ...
- Android 应用中十大常见 UX 错误
[核心提示] Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 App,在评测如此之多的应用之后,他们总结出了10个最常见的错误. 作为一个长期使用 An ...
- ios审核过程十大常见被拒问题
欢迎加入ios马甲包经验交流群,群聊号码:744520623 2018年伊始,苹果并没有因为新年的气氛而对CP们“网开一面”.频繁锁榜.调整排名规则以及关键词覆盖算法……不断抛出的大动作,让CP们叫苦 ...
- Android 应用中十大常见 UX 错误 分类: H1_ANDROID 2013-09-21 13:59 404人阅读 评论(0) 收藏
转载自:http://www.apkbus.com/android-5661-1.html 摘要: Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 Ap ...
- 【面试必备】常见Java面试题大综合
一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort ...
- Android开发面试经——3.常见Java基础笔试题
Android开发(29) 版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...
- 浅析十大常见排序(含C++代码)
首先声明一下,本文只对十种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的 了解可以参考以下资料: 1.<data structure and algor ...
随机推荐
- docker实战——Docker本地私有镜像仓库Harbor搭建及配置
Harbor介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然docker官方提供了公共的镜像仓库(Docker Hub),但是从安全和效率等方面考虑,部署我们私有环境内的Registr ...
- Android or java https ssl exception
1.http://www.trinea.cn/android/android-java-https-ssl-exception-2/ 2.http://www.eoeandroid.com/threa ...
- VIM-不常用或不知道的技巧
cc 清除一行 并在本行编辑, 同理 cw :32,65d 多行删除 g/pattern/d 删除包含特定字符的行 v/pattern/d 删除不包含指定字符的行 等同于 g!/pattern/d y ...
- MySQL-配置优化技巧
一.连接请求配置 1.查询当前连接数(show full processlist) show full processlist; 2.最大连接数(max_connections) max_connec ...
- CMD常用功能
1.导出文件目录树状结构 命令:“tree>file.txt /f”
- pandas 绘图与滑窗
#import nessary library before start import pandas as pd import numpy as np import matplotlib.pyplot ...
- 【从0開始Tornado建站】0.9版本号python站点代码开源--持续更新中
从5月份開始[从0開始Tornado建站]这个专栏,開始一点一点把这个分类兴趣站点弄起来,从无到有的过程也是令人兴奋的:-) 国庆的时候等待备案然后上线,如今站点域名为ustchack ...
- Atitit.收银系统模块架构attilax 总结
Atitit.收银系统模块架构attilax 总结 1. 常规收银系统模块结构1 1.1. 商品管理1 1.2. 会员系统1 1.3. 报表系统1 1.4. 会员卡系统1 1.5. 库存管理1 2. ...
- for zip
private void zip(ZipOutputStream out, File file, String base) { try { if (file.isDirectory()) { File ...
- 234. Palindrome Linked List【easy】
234. Palindrome Linked List[easy] Given a singly linked list, determine if it is a palindrome. Follo ...