加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:比较整洁的神秘面纱

发布时间:2020-12-15 08:50:10 所属栏目:Java 来源:网络整理
导读:我有一个填充整数的列表: List collection = new ArrayList();collection.add(this.score1);collection.add(this.score2);collection.add(this.score3); 现在我想比较每个单独得分的最高得分,看看哪个得分最高.直觉我试着这样做: String highestScore;if(C
我有一个填充整数的列表:

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

都给我错误:

Incompatible operand types Comparable and int

然而,这似乎工作:

int highestScoreValue =  Collections.max(collection);

现在怎么样?

为什么Java允许将int设置为Collections.max(collection),但是不允许将int与Collections.max(集合)进行比较?

解决方法

原始类型不能存储在Java集合中,它们会自动在相应的类中包装.

每当你执行list.add(score)时,得分首先被包装到Integer对象中,然后被添加到集合中.

现在,当您调用Collections.max时,类型为< T extends Object&的对象.可比&LT ;?超级T>>返回,并且您将它与具有==的基本类型进行比较,但是此运算符只能比较对象或直接原始类型的引用以及您的情况,因为未指定List参数类型,编译器无法取消装箱Integer实例返回int.

可能的解决方案是

>将返回值强制转换为Integer,从而允许取消装箱>使用equals方法而不是==运算符,以便将分数装箱为整数,然后将其与最大结果进行比较

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读