一些小陷阱

缺乏、安全感 2024-04-17 06:28 121阅读 0赞

文章目录

      • a==b
      • ArrayList remove(i) & remove(obj)
      • a > b & a-b > 0

a==b

  1. String a = "abc";
  2. String b = "abc";
  3. System.out.println("a == b" + a == b);

哈哈,第一感觉是不是打印a==btrue呢? 其实会打印false啦。


ArrayList remove(i) & remove(obj)

  1. ArrayList<Integer> arrayList = new ArrayList<>();
  2. arrayList.add(1);
  3. arrayList.add(2);
  4. arrayList.add(3);
  5. Iterator<Integer> iter = arrayList.iterator();
  6. arrayList.remove(4);
  7. while(iter.hasNext()){
  8. System.out.println(iter.next());
  9. }

是不是接的会输出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.

  1. int a = Integer.MAX_VALUE + 1; // -2147483648
  2. 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, 编译不通过.


发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL NULL的陷阱

    数据库中,某条记录某个字段值为null,意思不是空,而是未定义或者表示数据库不知道,null也是一种数据类型,是占存储空间的,所以想表示该值为空,应该赋值成''或者0。 陷阱

    相关 一些知识

    java语言知识模块 finalize() 方法 Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用

    相关 Pycharm 一些操作

    1.激活,网上找的。基本能用 在激活[Jetbrains][]旗下任意产品的时候选择激活服务器 填入以下地址便可成功激活 http://idea.liyan