Java基础阶段这些常见的坑,你遇到过没
1.基本数据类型
问:为什么 -0/3 结果是 0,而 -0.0/3.0 结果是 -0.0?(注意后边的结果0带负号)
答:在Java里,整数是用补码表示的。在补码中0只有一种表示方法。另一方面,浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0。
问:我可以用 % 除以一个小数吗?
答:当然可以。比如,如果 angle 是一个非负数,那么 angle % (2 * Math.PI) 就会把 angle 转换到 0 到 2 π 之间。
问:当 a b 都是基本类型变量时,a += b 和 a = a + b 的效果有区别吗?
答:当 a 和 b 的类型不同时,那两条语句的效果就可能有区别。 a += b 等同于 a = (int) (a + b),这种情况下可以是 a是int型,b是float型。但是同等情况下 a = a + b 就会编译报错。
2.条件语句和循环语句
问:为什么判断字符串相等不能使用 == ?
答:这反映了基础类型(int, double, boolean)和引用类型(String)的区别。
3.数组
问:某些Java开发人员使用 int a[] 而不是 int[] a 去声明一个数组。这两者有什么区别?
答: 在Java中这两种用法都是合法的,他们的作用都是一样的。前者是在C中的定义数组的方法。后者是JAVA推荐的方法,因为它的写法 int[] 更能表明这是一个 int 的数组。
问:为什么数组下标从0 开始 而不是从 1 开始?
答:这种传统起源于机器语言的编程方法。在机器语言中,数组下标被用来计算元素位置与第一个元素之间的偏移量。如果从1开始的话,计算偏移时还需要做一次减法运算,那是种浪费。
问: 如果我用 负数 作为数组下标会发生什么事?
答:下标小于0 或者 大于等于数组长度,JAVA运行时会抛出 ArrayIndexOutOfBoundsException 异常,并且中止程序运行。
问:使用数组时还有其他需要注意的陷阱吗?
答:需要记住,JAVA在你创建一个数组时会去初始化它,所以声明一个数组需要 O(N)的时间。
|