一些小陷阱
文章目录
- a==b
- ArrayList remove(i) & remove(obj)
- a > b & a-b > 0
a==b
String a = "abc";
String b = "abc";
System.out.println("a == b" + a == b);
哈哈,第一感觉是不是打印a==btrue呢? 其实会打印false啦。
ArrayList remove(i) & remove(obj)
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
Iterator<Integer> iter = arrayList.iterator();
arrayList.remove(4);
while(iter.hasNext()){
System.out.println(iter.next());
}
是不是接的会输出1 2 3
.No~
java.lang.IndexOutOfBoundsException: Index: 4, Size: 3
因为arrayList.remove(4)
调用的是 remove(int index)
, 而不是remove(Object o)
a > b & a-b > 0
实际上, 在大多情况下 a > b 是等价于 a - b > 0 的.
but, 若当其中一个变量的值为该类型最大最小值时(例如,Integer.MAX_VALUE、Integer.MIN_VALUE), 就需要小心了.
Let’s See.
int a = Integer.MAX_VALUE + 1; // -2147483648
int b = Integer.MIN_VALUE - 1; // 2147483647
Integer.MAX_VALUE
的值为2^ 31 31 31 - 1, 即2147483647
Integer.MIN_VALUE
的值为2^ − 31 -31 −31, 即-2147483648
也就是说,
最大值 + 1 == 最小值
最小值 - 1 == 最大值
So, 在一般的情况下还是直接比较,而不是通过计算然后根据结果的正负判断比较结果.
最后, 执行System.out.println(2147483648)
, 也就是2^ 31 31 31会发生什么?
yes, 编译不通过.
还没有评论,来说两句吧...