为什么这段代码有时会产生ArrayOutOfBoundsException?那怎么可能String.valueOf(int)
呢?
public static String ipToString(ByteString bs) {
if (bs == null || bs.isEmpty()) {
return null;
} else {
StringBuilder sb = new StringBuilder();
boolean started = false;
for (Byte byt : bs) {
if (started) {
sb.append(".");
}
sb.append(String.valueOf(byt & 0xFF));
started = true;
}
return sb.toString();
}
}
java.lang.ArrayIndexOutOfBoundsException: -81914
at java.lang.Integer.getChars(Integer.java:458)
at java.lang.Integer.toString(Integer.java:402)
at java.lang.String.valueOf(String.java:3086)
at com.mystuff.mypackage.ipToString(MyCode.java:1325)
...
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
更新
发生这种情况时,我不知道字节的值,但似乎字节的任何可能值都不应该是可能的。
一旦发生一次,每次调用都会出错,并带有相同的异常。
环境:
java version "1.8.0_20" Java(TM) SE Runtime Environment (build 1.8.0_20-b26) Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
这是JDK 8u20中引入的JIT编译器错误,它是另一个修补程序的副作用:
JDK-8042786
该问题与自动装箱消除优化有关。
解决方法是通过-XX:-EliminateAutoBox
JVM标志关闭优化
在最新的JDK 9源库中似乎也存在该问题。
我已经提交了错误报告:https :
//bugs.openjdk.java.net/browse/JDK-8058847,其中包含100%可重复的最小测试用例。
问题内容: 根据文档,该方法返回: 如果参数是,则字符串等于; 否则,返回的值。 但是,当我尝试这样做时,怎么会这样: 它会抛出NPE吗?(如果你不相信,请自己尝试!) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗? 问题答案: 问题是方法已重载: String.valueOf(Object) String.valueOf(char[]) Java规范语言要求在这种情况下,选择最具体的重
问题内容: 我得到一个在服务启动(创建bean),当我使用Java 8层的功能。 Java 8已设置并且正在运行。该代码正确编译。服务启动时,由于未创建Bean,因此服务无法侦听端口。当我更改代码(删除Java 8构造)时,服务启动,并且一切正常。 这是我正在使用的代码(该服务启动的工作代码): 使用Java 8构造的相同代码: 包含这段代码的类的Bean是使用组件扫描创建的。 以下是使用第二个代
问题内容: 在Java中,和之间有什么区别?是否有针对这些的特定代码约定? 问题答案: 根据Java文档,返回: 如果参数是,则字符串等于; 否则,返回的值。 因此,除了附加的方法调用外,实际上没有什么区别。 另外,如果实例为,则将抛出a,因此可以说,它的 安全性 较低。
可能,这是最简单的事情,但是我不能在angular中将一个字符串解析为Int.. 我想做的是: 如何对这些num1和num2值求和? 谢谢!
问题内容: 我有以下值: 我如何连接这些值,以便最终得到一个字符串is ; 请注意,乘以 10000,乘以 1000 .....以及乘以1将不起作用 ,因此,当我将这些值相加时,它将丢失。 问题答案: 这对我有用。 原来是
我有这样的方法 最后我得到了