首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新的BigInteger(字符串)发出声纳警告

新的BigInteger(字符串)发出声纳警告
EN

Stack Overflow用户
提问于 2018-06-05 08:17:25
回答 1查看 1.8K关注 0票数 2

我使用的是IntelliJ IDEA 2018.1.3终极版,需要将其与大整数(大到不适合long,例如20180531234240565494)进行比较,表示为字符串:

代码语言:javascript
复制
public int compareNumeric(String compareTo) {
    return new BigInteger(version).compareTo(new BigInteger(compareTo));
}

这是提出的这里解决方案,我一直认为这是从String创建BigInteger的正确方法。

然而,IntelliJ通过Sonar插件给了以下警告

构造函数不应用于实例化"String“、"BigInteger”、"BigDecimal“和基元包装类squid:s 2129。 字符串、BigInteger、BigDecimal和用于包装原语的对象的构造函数不应使用。这样做不太清楚,而且使用更多的内存,在字符串的情况下只使用所需的值,而对其他的一切都使用valueOf。 此外,Java 9中不推荐这些构造函数,这表明它们最终将从语言中完全删除。不兼容代码示例 字符串空=新字符串();//不兼容;本质上产生"",所以只需使用它。字符串非空=新字符串(“Hello”);//非兼容双myDouble =新的双(1.1);//不兼容;使用valueOf整数=新整数=新整数(1);//不兼容布尔bool =新布尔(真);//非兼容BigInteger bigInteger =新BigInteger("1");//不兼容bigDecimal BigDecimal =新BigDecimal(1.1);//不兼容BigDecimal BigDecimal=新BigDecimal(1.1);//不兼容的布尔bool=新布尔(真) 兼容解决方案 字符串空= "";字符串非空= "Hello“;双myDouble = Double.valueOf(1.1);整数整数= Integer.valueOf(1);布尔=Boolean.valueOf(真);BigInteger bigInteger = BigInteger.valueOf(1);BigDecimal bigDecimal = BigDecimal.valueOf(1.1);

首先,我不认为构造函数在Java9中受到反对,Sonar在这里是错的吗?

我是做错了比较,引发了假阳性,还是应该用其他方式进行比较?

我唯一能想到的方法是直接比较字符串,但这也会迫使我首先检查字符串是否是数字的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 09:03:57

您遇到了这个问题,SONARJAVA-2740已经修复了最新的SonarJava版本,应该在几天内就可以公开发布。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50695355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档