1 switch-case 语句
区别于 C 语言中的 switch 只支持整型数据不同,Java 共支持 10 种参数类型:
- byte, short, int, char
- String
- Byte, Short, Integer, Character
default 语句的位置:
public class SwitchDefault {public static void main(String args[]) {int i = 1;switch(i) {case 1:System.out.println(1);default:System.out.println("default");case 2:System.out.println(2); break;}}}// 运行结果// 1// default// 2
Java7 及其后续版本中,switch 开始支持 String,这一点很关键!
2 foreach
这个跟 C++11 标准中的 foreach 完全一致
public class ForeachExample {public static void main(String args[]) {String[] books = {"Java", "C", "C++", "C#", "asp"};for (String book : books) {System.out.println(book);}}}// 运行结果// Java// C// C++// C#// asp
上例中的
book实际上就是每个具体 String 对象的引用,这一点跟 C++ 中的值复制是不一样的。
3 数组
3.1 数组声明
int []a = new int[3];char b[] = new char[4], c[] = new char[5];
方括号可以写在后面,也可以写在前面。唯一的区别就是,写在前面则后面所有的变量都是数组,而写在后面则只有当前被修饰的变量是数组。
使用数组之前必须要 new ,给数组变量分配存储空间。
Java 语言中生命数组时,不能指定其长度(数组中元素的个数),例如 int a[5]; 就是非法的!
本质上数组是引用类型,上例中
a只是一个引用,不能说从a这个变量的地址开始有 5 个元素,而是a指向的地址处连续存放了 5 个元素。
3.2 数组初始化
静态初始化:
int []a = {3, 9, 8};int []a = new int[] {3, 9, 8}; // 这两种写法等价MyDate[] dates = {new MyDate(22, 7, 1964),new MyDate(1, 1, 2000),new MyDate(22, 12, 1964),}
默认初始化:数组一经分配空间,其中的每个元素都会被隐式初始化:数值类型初始化为 0,引用类型为 null
int []a = new int[5]; // 所有的元素都被初始化为 0String []s = new String[3]; // 所有的元素都被初始化为 null
3.3 数组元素的引用
每一个数组都有一个属性 length :
int []ages = new int[10];for (int i = 0; i < ages.length; ++i) {System.out.println(ages[i]);}
3.4 数组的复制
System.arraycopy() 提供了数组元素复制的功能:
int[] source = {1, 2, 3, 4, 5, 6};int[] dest = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};System.arraycopy(source, 0, dest, 0, source.length);
关于数组元素拷贝的效率问题:
System.arraycopy()效率最高Arrays.copyOf()效率次之Object.clone()效率次于前两种for循环的效率最低
