Java:比较整洁的神秘面纱
我有一个填充整数的列表:
List collection = new ArrayList(); collection.add(this.score1); collection.add(this.score2); collection.add(this.score3); 现在我想比较每个单独得分的最高得分,看看哪个得分最高.直觉我试着这样做: String highestScore; if(Collections.max(collection) == this.score1) { highestScore = "Score 1"; } if(Collections.max(collection) == this.score2) { highestScore += ",Score 2"; } if(Collections.max(collection) == this.score3) { highestScore += ",Score 3"; } 然而, Collections.max(collection) == this.score1 Collections.max(collection) == this.score2 Collections.max(collection) == this.score3 都给我错误:
然而,这似乎工作: int highestScoreValue = Collections.max(collection); 现在怎么样? 为什么Java允许将int设置为Collections.max(collection),但是不允许将int与Collections.max(集合)进行比较? 解决方法
原始类型不能存储在Java集合中,它们会自动在相应的类中包装.
每当你执行list.add(score)时,得分首先被包装到Integer对象中,然后被添加到集合中. 现在,当您调用Collections.max时,类型为< T extends Object&的对象.可比< ;?超级T>>返回,并且您将它与具有==的基本类型进行比较,但是此运算符只能比较对象或直接原始类型的引用以及您的情况,因为未指定List参数类型,编译器无法取消装箱Integer实例返回int. 可能的解决方案是 >将返回值强制转换为Integer,从而允许取消装箱>使用equals方法而不是==运算符,以便将分数装箱为整数,然后将其与最大结果进行比较 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |