程序运行中的实际值如图,但是我调用TAG_ABNORMALS.contains(tag.getAid()) 是返回的确是false, 请问是不是在泛型是Long类型的时候contains有什么特殊情况我没有注意到?
程序运行中的实际值如图,但是我调用TAG_ABNORMALS.contains(tag.getAid()) 是返回的确是false, 请问是不是在泛型是Long类型的时候contains有什么特殊情况我没有注意到?
这要看tag.getAid()
返回什么值了。如果返回Long
(对象)是没问题的,返回Integer
当然会有问题,因为Integer.valueOf(1)
跟Long.valueOf(1)
并不相等。
如果返回的是基础类型(long
或int
),就要非常小心了,这里涉及到装箱(Box)的问题。我猜long
不会有问题但int
会有问题。所以保险起见可以这么写:
if (TAG_ABNORMALS.contains(Long.valueOf(tag.getAid())) {
...
}
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答749 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
TAG_ABNORMALS 是静态的,这个跟线程有些关系,把TAG_ABNORMALS改成非全局的问题就没有了。