Java中关于String类型的10个问题

标签: 基础技术 String | 发表时间:2014-08-27 08:00 | 作者:strongme
出处:http://www.importnew.com

1. 如何比较两个字符串?用“=”还是equals

简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你项检测俩字符串是不是相等的,你就必须得用equals()方法。

如果你知道“字符串保留(string intern)”的概念那就更好了。

2. 为什么安全敏感的字符串信息用char[]会比String对象更好?

String对象是不可变的就意味着直到垃圾回收器过来清扫之前它们都不会发生变化的。用数组的话,就可以很明确的修改它任何位置的字符元素。这样的话,如密码等安全敏感的信息就不会出现在系统的任何地方。

3. 字符串对象能否用在switch表达式中?

从JDK7开始的话,我们就可以在switch条件表达式中使用字符串了,也就是说7之前的版本是不可以的。

// java 7 only!
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

4. 如何将字符串转换为整型数值?

int n = Integer.parseInt("10");

如此简单,经常使用有偶尔也会被遗忘。

5. 如何用空格去分隔字符串?

我们可以很便捷的使用正则表达式来进行分隔。“\s”就表示空格,还有如”",”\t”,”\r”,”\n”.

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

6. substring()方法具体是都干了些啥?

在JDK6中,这个方法只会在标识现有字符串的字符数组上 给一个窗口来表示结果字符串,但是不会创建一个新的字符串对象。如果需要创建个新字符串对象,可以这样在结果后面+一个空的字符串:

str.substring(m, n) + ""

这么写的话就会创建一个新的字符数组来表示结果字符串。同时,这么写也有一定的几率让你的代码跑的更快,因为垃圾回收器会吧没有在使用的大字符串回收而留下子字符串。

Oracle JDK7中的substring()方法会创建一个新的字符数组,而不用之前存在的。看看 这张图就会明白substring()方法在JDK6和JDK7中的区别。

7. String&StringBuilder&StringBuffer

String vs StringBuilder:StringBuilder是可变的,这就意味你在创建对象之后还可以去修改它的值。StringBuilder vs StringBuffer:StringBuffer是同步的,意味着它是线程安全的,但是就会比StringBuilder慢些。

8. 如何快速重复构造一段字符串?

在Python编程中,只需要用字符串去乘以一个数字就可以 搞定了,那在Java编程中,我们可以使用来自Apache Commons Lang包中的StringUtils类的repeat()方法。

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

9. 如何将时间格式的字符串转换成date对象?

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 = StringUtils.countMatches("11112222", "1");
System.out.printl```  n(n);

相关文章

相关 [java string 类型] 推荐:

Java中关于String类型的10个问题

- - ImportNew
简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等. 只要你项检测俩字符串是不是相等的,你就必须得用equals()方法. 如果你知道“字符串保留(string intern)”的概念那就更好了. 为什么安全敏感的字符串信息用char[]会比String对象更好.

Java String 的十大常见问题

- - ITeye博客
Java字符串经常被问到的排名前十的问题.    1、如何比较字符串. 使用 “==”  还是 “equals()”.   简单来讲,“==”比较的是引用(对象的内存地址),“equals()” 比较值是否相等. 除非你想检测两个字符串是否是同一对象,否则都用equals().   当然了解字符串池的概念更好.

读”Java 性能优化之 String 篇“有感

- - ITeye博客
读了 IBM Developer Works上的一篇. Java 性能优化之 String 篇  感觉写得比较实用,但也有一些问题值得斟酌:. 1)关于内存空间的使用大小,虽然Java的基本类型的大小是固定的,不因运行环境而变化,但是Object overhead,以及Reference的大小是与平台相关的,比如在64bit的机器上Object overhead 应该是16 bytes,Reference是8bytes,这点应该说清楚.

String 常量池和 String#intern()

- - ImportNew
String是Java基础的重要考点. 可问的点多,而且很多点可以横向切到其他考点,或纵向深入JVM. 本文略过了String的基本内容,重点在于String#intern(). String常量可能会在两种时机进入常量池:. 编译期:通过双引号声明的常量(包括 显示声明、 静态编译优化后的常量,如”1”+”2”优化为常量”12”),在前端编译期将被静态的写入class文件中的“常量池”.

Java 类型信息

- - CSDN博客移动开发推荐文章
*  为什么需要运行时识别对象和类的信息. 多态 - 实例都被向上转型为父类引用,实例调用相应方法时,需要知道当前父类型引用的具体类型,并从中查找相应方法. IDE - 获取任意类的所有字段和方法.  跨网络的远程平台上创建和运行对象的能力. 从磁盘文件,或者网络连接中获取一串字节(表示类). * 运行时识别对象和类的信息的两种方式:.

mysql java hibernate类型对应

- - 企业架构 - ITeye博客
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述   . CHAR N CHAR java.lang.String 1  字符型  . BLOB L+N BLOB java.lang.byte[] -4  二进制型  . TEXT 65535 VARCHAR java.lang.String -1 text文本型  .

String与InputStream互相转换

- - BlogJava_首页
原文: http://www.heatpress123.net/cpzs/.

String压缩 解压缩

- - CSDN博客推荐文章
数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现. 1、使用ISO-8859-1作为中介编码,可以保证准确还原数据. 2、字符编码确定时,可以在decompress方法最后一句中显式指定编码. * @return 压缩后的字符串. GZIPOutputStream os = null; // 使用默认缓冲区大小创建新的输出流.

Oracle RAC JDBC connection string - multitude - 博客园

- -
官方文档, 一如既往地冗长, 可靠. 这个第三方总结很简单, 看样子是第三方驱动厂商.

SQL 数据类型和 Java 数据类型间的映射关系

- - ITeye博客
由于 SQL 数据类型和 Java 数据类型是不同的,因此需要某种机制在使用 Java 类型的应用程序和使用 SQL 类型的数据库之间来读写数据. 为此,JDBC 提供了 getXXX 和 setXXX 方法集、方法 registerOutParameter 和类 Types. 本章汇集了影响各种类和接口的数据类型的有关信息,并列出所有的对应关系表(这些表显示了 SQL 类型和 Java 类型之间的映射关系)以便于参考.