当前位置 > 主页 > 万和大讲堂 >


南京Java培训分享:Java中10大常问的关于String的问题

2016-06-13 13:32

  Java中字符串对象是一种特殊的对象。String类是一个不可变的(final)类,也就说,String对象一旦创建就不允许修改。String类有一个对应的常量池(String pool),每一个内容相同的字符串在常量池里都会有一个对象与之对应。本文南京万和Java培训将分享Java中10大常问的关于String的问题。


  1. 字符串比较,使用 “==” 还是 equals() ?


  简单来说, “==” 判断两个引用的是不是同一个。具体来说是地址,不是值,而 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[] 数组


  而不是共用,想要了解更多。  更多内容,请咨询南京万和Java培训


  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);


  当然上面关于字符串的内容都是最基本的,也是面试官经常会问到的问题,南京万和Java培训希望各位猿猿(媛媛)们灵活掌握。

最近开班 more>
  • Python基础班
  • Java全栈开发
  • 前端基础班
  • 软件测试
  • 云原生精英班
  • 云网预科班
  • CISP
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCM 12C
  • OCP 19C
  • RHCE 9.0
  • 随时开课
  • 12月26日
  • 随时开课
  • 12月4日
  • 12月16日
  • 12月9日
  • 12月21日
  • 1月6日
  • 12月30日
  • 12月16日
  • 12月21日
  • 12月7日
  • 12月7日
  • ——
  • 随时开课
  • 12月16日
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入