我们有一些代码执行var1 +“\ t”+ var2 ...其中var1和var2的类型为String,但它产生以下堆栈跟踪:
Caused by: java.lang.ArrayStoreException
at java.lang.String.getChars(String.java:814) [rt.jar:1.8.0_40]
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:422) [rt.jar:1.8.0_40]
at java.lang.StringBuilder.append(StringBuilder.java:136) [rt.jar:1.8.0_40]
此处的操作系统是带有Oracle Java 1.8.0_40的CentOS 6.6
这怎么可能? String.getChars正在执行System.arraycopy(...)并传递src和tgt vars类型为char []
我唯一可以在网上找到远程接近这个问题的是从2013年开始的“Firefox for Android”https://bugzilla.mozilla.org/show_bug.cgi?id=861660的错误报告,没有后续跟踪。
这是触发调用的实际代码行 StringBuilder.append:
bw.write(
id + "\t" + effectiveTime + "\t" + active + "\t"
+ moduleId + "\t" + lhsId + "\t" + rhsId + "\t"
+ roleGroup + "\t" + roleId + "\t"
+ inferredTypeId + "\t" + someId);
这里的所有变量都是String类型,而bw是BufferedWriter(不是我希望这一点)。此外,系统中此时没有线程可以说。不幸的是,我们无法在我们的测试中复制错误,只能复制我们客户的错误。