OCA/OCP Java Note (6): Core Java APIs (1)

1. Creating and Manipulating Strings

1.1. Concatenation

  使用“+”运算符进行字符串拼接时,需要注意:

  1. 如果两个操作数都是数值,则+表示数值加;
  2. 如果有一个操作数时String,则+表示拼接;
  3. 表达式按照从左向右的顺序求值。

eg.

1.2. Immutability

  String是immutable的。

eg.

1.3. The String Pool

  JVM使用字符串池保存字符串以便重复利用,其中包括程序中出现的字面值,如“name”。其他如 myObject.toString() 虽然也是String,但不是字面值,不会保存在字符串池中。如以下两种用法:

2. Using the StringBuilder Class

  StringBuilder是mutable的。

eg.

new StringBuilder() 只出现了一次,只有一个StringBuilder实例被创建。

2.1. StringBuilder vs. StringBuffer

  StringBuffer功能与StringBuilder类似,但由于StringBuffer是线程安全的,其速度低于StringBuilder。

3. Understanding Equality

eg.

字符串字面值存储于字符串池,x和y引用是相等的,String.trim()生成了新的字符串对象,x和z不相等。

4. Understanding Java Arrays

  可以使用以下几种方式声明数组:

中括号前是否有空格没有区别,中括号位置有区别:

4.1. Creating an Array with Reference Variables

  数组的equals()方法比较的是引用,而不是数组内容。

eg.

  从Java 5开始,Java提供了一个打印数组内容的方法,在上面的例子中,使用:

将输出:

eg.

注意第7行,StringBuilder对象可以放置于Object数组中,但在该段代码中,并不存在实际的Object数组,objects仅仅是指向了一个String型数组againStrings,该行运行时将抛出ArrayStoreException。

4.2. Using an Array

eg.

4.3. Sorting

  Java提供了Arrays.sort()对数组进行排序(升序),使用前需要import,以下两种形式均可:

eg.

对String数组的排序是按照字母顺序进行的,数字排在字母前面,小写字母排在大写前面。

4.4. Searching

  Java提供了Arrays.binarySearch()对已排序(升序)的数组进行二分查找,规则为:

Scenario Result
被查找数组已排序,包含查找的目标元素 目标元素的索引序号
被查找数组已排序,不包含目标元素 目标元素应被插入的位置p的相反数再减1(-p-1)
被查找数组未排序 不可预测的结果

eg.

4.5. Varargs

  main()的参数是一个String数组,可以使用以下三种方式:

第三种 String... args 使用了可变参数,可以像普通数组那样使用,如 args.lengthargs[0] 等都是合法的。

4.6. Multidimensional Arrays

  多维数组中,每一维度可以具有不同的长度。

eg. 遍历多维数组: