Java,整数不是唯一的,但它们在集合中如何比较?
我使用了这种直接的方法:Java,整数不是唯一的,但它们在集合中如何比较?,java,collections,autoboxing,Java,Collections,Autoboxing,我使用了这种直接的方法: Collection<Integer> aCollection = Arrays.asList(1,2,3,4,5,6); Integer a = new Integer(5); if( aCollection.contains(a) ) System.out.println("aCollection contains 5"); 包含不按引用进行比较newinteger(50000)与另一个对newinteger(
Collection<Integer> aCollection = Arrays.asList(1,2,3,4,5,6);
Integer a = new Integer(5);
if( aCollection.contains(a) )
System.out.println("aCollection contains 5");
包含
不按引用进行比较newinteger(50000)
与另一个对newinteger(50000)
的调用不同。但是,firstInt.equals(新整数(50000))
将返回true,因此contains将起作用。我使用较高的数字,因为实习可能发生在较低的数字上
在执行装箱时,0-127将被放入固定池中,但在显式创建新对象时不会,因此您将对同一个值具有相同的引用,但除此之外,您无法保证任何内部调用,并且对于同一个值,引用可能是对不同整数对象的引用Integer.valueOf(
将在适当的情况下尝试实习,即始终在[-128,128)
范围内,并且没有规定在该范围外实习或不实习
在调用.contains()
时,我是否可以安全地假设任何集合都将以这种方式运行
您可以假设.contains(Object o)
将返回true
当且仅当集合的一个或多个成员满足该成员时。等于(o)
,或者o
为null,并且至少有一个null
成员
技术上:
如果此集合包含指定的元素,则返回true
。详细信息
形式上,返回true
当且仅当此集合包含
至少一个元素e,使得(o==null?e==null:o.equals(e))
定义如下:
如果此集合包含指定的元素,则返回true
。详细信息
形式上,返回true
当且仅当此集合包含
至少一个元素e,使得(o==null?e==null:o.equals(e))
换句话说:如果o
为null
,则如果集合包含null
元素,contains将返回true
,否则它将返回true
当且仅当存在等于()的元素时(
您正在搜索的元素)
每次调用新整数(5)
都将返回不同的引用,但根据以下条件,所有对象都是相等的:
将此对象与指定对象进行比较。如果
并且仅当参数不是null
并且是整数
对象时
包含与此对象相同的int
值
集合的.contains()
在内部调用.equals()
方法
在本例中,您使用的是Integer对象。而Integer对象.equals()在您列出的所有情况下都可能返回true
但是,对于您拥有的自定义对象(例如Person),情况可能并非如此
现在开始收集
Collection<Person> aCollection = Arrays.asList(b,c,d);
Person a = new Person("Abhishek");
Collection aCollection=Arrays.asList(b,c,d);
人a=新人(“阿披实”);
可能返回false。因为您尚未重写.equals()Person类中的方法自动装箱是Java编译器在基元类型及其相应的对象包装类之间进行的自动转换。例如,将int转换为整数,将double转换为double,等等。如果转换方向相反,则称为取消装箱
您可以通过查看源代码来解决此类疑问。“0-127将被放入一个固定池中,因此您将对相同的值有相同的引用…”不是在您显式调用
new Integer(5)
@jlordo”时,但除此之外,您无法保证任何内部调用,并且引用可能不同现在好多了?我已经编辑了我的评论,它还不正确。你有一个矛盾:“0-127将被放入一个固定池中,因此你将对相同的值有相同的引用……而引用可能不同。”@jlordo我可能遗漏了一些东西,但我看不到矛盾。对于0-127,会发生interning,引用是相同的。在这上面,引用指向相同值的不同对象。正如我在第一条注释中所说的。当显式调用新整数(5)时
您将获得对新对象的引用,而不是对内部对象的引用。好的,新整数(3)!=新整数(3)和(新整数(3))。等于(新整数(3))。集合与等于进行比较。
boolean contains(Object o)
Collection<Person> aCollection = Arrays.asList(b,c,d);
Person a = new Person("Abhishek");