有没有办法告诉java始终创建一个新实例而不是实习

时间:2013-09-05 16:46:05

标签: java testing junit

我最近遇到了一个奇怪的问题,测试在我们的Bamboo盒子上失败了,但在dev盒子上却没有。经过大量调试后,我们发现原因是由于在Long上使用==而不是.equals。一旦我弄清楚它是有意义的,但我很惊讶没有开发人员可以重新创建它,但它总是发生在构建框上。

对于我们的测试,抓住这些东西并尝试防止==它不是有意的,这是很好的,但我不知道告诉Java不实习Longs,Strings等的方法。 ..是否有一个设置可以给JVM来处理这个?

2 个答案:

答案 0 :(得分:8)

检测此类问题的一个选项是在构建期间对代码执行静态分析。我相信FindBugs有一个参考平等检测器。

请参阅:Suspicious Reference Comparison

答案 1 :(得分:0)

快速谷歌搜索空白,但我相信有一个命令行参数来控制长缓存的大小(默认为256)。这是我在一年前在StackOverflow上读到的东西,所以,按照SO来付费是值得的!如果你能找到它并在你的测试机器上将其设置为零,它将覆盖这个特殊问题。

找到它 - 看看问题#2974561。@sunny接近尾声回答。

New Integer vs valueOf

嗯,更详细地看一下,你可能会增加缓存,但不会减少。所以不要认为这会奏效,但也许你可以搞清楚。