java考试圈套

java考试陷阱

今天偶尔做了一个java题,直接被鄙视了。

贴代码

package 考试;

public class Demo {
	public static void main(String[] args) {
		int i = 10;
		switch (i) {
		default:
			System.out.println("default");
		case 0:
			System.out.println("0");
			break;
		case 1:
			System.out.println("1");
		case 2:
			System.out.println("2");
		}
	}
}

default
0

结果是这个,这样弄到switch的运行机制了,switch无论怎么样写,都是先判断case中的数字,所以无论default写在哪里都是先执行判断case语句。

重点在后面,如果case中有这个值,那么直接执行这个case中的语句。如果没有这个值,系统才会找default。执行default,一直执行到遇到break。所以很不幸我C语言没学好呀。。。太悲剧了,寒假回去恶补一下。


还有一个陷阱是&&,||与&,|,前者具有短路功能,后者没有。我记反了,所以考试也出错了。。


还有一个陷阱是java字符串数组,虽然String是一个类,但是这个类比较特殊,可以这样使用

String a[] = { "", "", "", "", "" };//正确
String aa[] = new String[5];//也是正确的
aa[0] = "123";
System.out.println(aa[0]);
但是对于自定义的类的话,与String类就有很大不同

package 考试;

import b.Student;

public class Demo {
	public static void main(String[] args) {
		Student s[] = new Student[5];
		s[0].setName("aaa");
		System.out.println(s[0].getName());
	}
}

这样直接使用会出现空指针异常。

Exception in thread "main" java.lang.NullPointerException
	at 考试.Demo.main(Demo.java:8)

个人觉得C和java真的是博大精深呀,东西太多了。值得好好研究。

还有一个小陷阱

数组的长度,都是.length

字符串的长度都是.length()

list的大小是.size()