1、注释中的代码也能执行
public static void main(String[] args) {
// 下面这行代码会执行,因为 \\u000d 是一个换行符
// \u000d System.out.println("hello world");
}
2、除数为0也可以不报错
下面的代码会在控制台打印Infinity
System.out.println(1.0 / 0.0);
3、取余的正负号
a%b的定义是(a/b)*b+a%b=a
System.out.println(14 % -4);// 打印2
System.out.println(-14 % 4);// 打印-2
4、负数的绝对值还是负数
下面两行的代码都会打印-2147483648
,因为int类型的最大整数为2^31-1,所以造成了整数溢出。
System.out.println(Math.abs(Integer.MIN_VALUE));
System.out.println(-Integer.MIN_VALUE);
5、为什么数组的起始索引是0而不是1
这个习惯来源于机器语言,那时要计算一个数组元素的地址需要将数组的起始地址加上该元素的索引。将起始索引设为1要么会浪费数组的第一个元素的空间,要么会花费额外的时间来将索引减1。