关于ArrayList<Long>的contains方法的一些疑惑

图片描述

图片描述

程序运行中的实际值如图,但是我调用TAG_ABNORMALS.contains(tag.getAid()) 是返回的确是false, 请问是不是在泛型是Long类型的时候contains有什么特殊情况我没有注意到?

阅读 9.6k
2 个回答

TAG_ABNORMALS 是静态的,这个跟线程有些关系,把TAG_ABNORMALS改成非全局的问题就没有了。

这要看tag.getAid()返回什么值了。如果返回Long(对象)是没问题的,返回Integer当然会有问题,因为Integer.valueOf(1)Long.valueOf(1)并不相等。

如果返回的是基础类型(longint),就要非常小心了,这里涉及到装箱(Box)的问题。我猜long不会有问题但int会有问题。所以保险起见可以这么写:

if (TAG_ABNORMALS.contains(Long.valueOf(tag.getAid())) {
    ...
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题