【发布时间】:2020-04-10 11:26:59
【问题描述】:
虽然 IntelliJ IDE 没有给我任何警告,但是这个两行的方法会导致编译错误Error:(12, 37) java: incompatible types: byte[] cannot be converted to int:
import java.math.BigInteger;
public class Test {
public static void main(String[] args){
String foo = "123";
new BigInteger(foo.getBytes(), 1, 1);
}
}
在 JDK 11 中有一个有效的构造函数,其签名为 public BigInteger(byte[] val, int off, int len)(java.math.BigInteger 的第 306 行),但在 JDK 8 中没有。我能够直接使用 JDK 11 的 javac 编译它,但它失败了正如预期的那样使用JDK 8。我已将 IntelliJ 配置为使用 JDK 11,但我不知道为什么它使用旧版本...System.out.println(System.getProperty("java.version")) 打印 11.0.1。好像是用 JDK 8 编译,用 JDK 11 运行。
我已检查我在以下位置选择了 JDK 11:
- 运行/调试配置 > JRE
- 项目结构 > 项目 > 项目 SDK
- 项目结构 > 项目 > 项目语言级别
- 项目结构 > 模块 > 语言级别
我正在使用IntelliJ IDEA 2018.2.6 (Community Edition)。重启 IntelliJ 后问题仍然存在。
编辑:
项目使用maven
【问题讨论】:
-
在我的原始代码中,我有一个以 64 为基数编码的数字,我遇到了同样的问题,我只是简化了问题。
-
您的代码没有意义。如果要将 String 转换为 BigInteger,请使用
new BigInteger(String)。 -
查看 javadoc:docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/… 接受
byte[]的构造函数应该是一个“包含 BigInteger 的二进制补码表示的字节子数组”。不是字符串编码的字节数组。 -
适用于我的 JDK 11。
标签: java maven intellij-idea compiler-errors intellij-14