1 switch-case 语句

区别于 C 语言中的 switch 只支持整型数据不同,Java 共支持 10 种参数类型:

  • byte, short, int, char
  • String
  • Byte, Short, Integer, Character

default 语句的位置:

  1. public class SwitchDefault {
  2. public static void main(String args[]) {
  3. int i = 1;
  4. switch(i) {
  5. case 1:
  6. System.out.println(1);
  7. default:
  8. System.out.println("default");
  9. case 2:
  10. System.out.println(2); break;
  11. }
  12. }
  13. }
  14. // 运行结果
  15. // 1
  16. // default
  17. // 2

Java7 及其后续版本中,switch 开始支持 String,这一点很关键!

2 foreach

这个跟 C++11 标准中的 foreach 完全一致

  1. public class ForeachExample {
  2. public static void main(String args[]) {
  3. String[] books = {"Java", "C", "C++", "C#", "asp"};
  4. for (String book : books) {
  5. System.out.println(book);
  6. }
  7. }
  8. }
  9. // 运行结果
  10. // Java
  11. // C
  12. // C++
  13. // C#
  14. // asp

上例中的book实际上就是每个具体 String 对象的引用,这一点跟 C++ 中的值复制是不一样的。

3 数组

3.1 数组声明

  1. int []a = new int[3];
  2. char b[] = new char[4], c[] = new char[5];

方括号可以写在后面,也可以写在前面。唯一的区别就是,写在前面则后面所有的变量都是数组,而写在后面则只有当前被修饰的变量是数组。
使用数组之前必须要 new ,给数组变量分配存储空间。

Java 语言中生命数组时,不能指定其长度(数组中元素的个数),例如 int a[5]; 就是非法的

本质上数组是引用类型,上例中 a 只是一个引用,不能说从 a 这个变量的地址开始有 5 个元素,而是 a 指向的地址处连续存放了 5 个元素。

3.2 数组初始化

静态初始化

  1. int []a = {3, 9, 8};
  2. int []a = new int[] {3, 9, 8}; // 这两种写法等价
  3. MyDate[] dates = {
  4. new MyDate(22, 7, 1964),
  5. new MyDate(1, 1, 2000),
  6. new MyDate(22, 12, 1964),
  7. }

默认初始化:数组一经分配空间,其中的每个元素都会被隐式初始化:数值类型初始化为 0,引用类型为 null

  1. int []a = new int[5]; // 所有的元素都被初始化为 0
  2. String []s = new String[3]; // 所有的元素都被初始化为 null

3.3 数组元素的引用

每一个数组都有一个属性 length

  1. int []ages = new int[10];
  2. for (int i = 0; i < ages.length; ++i) {
  3. System.out.println(ages[i]);
  4. }

3.4 数组的复制

System.arraycopy() 提供了数组元素复制的功能:

  1. int[] source = {1, 2, 3, 4, 5, 6};
  2. int[] dest = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
  3. System.arraycopy(source, 0, dest, 0, source.length);

关于数组元素拷贝的效率问题:

  • System.arraycopy() 效率最高
  • Arrays.copyOf() 效率次之
  • Object.clone() 效率次于前两种
  • for 循环的效率最低