1

私は最近、開発ボックスではなく、Bamboo ボックスではテストが失敗するという奇妙な問題に遭遇しました。多くのデバッグを行った結果、原因は Long で .equals の代わりに == を使用したことが原因であることがわかりました。一度それが理にかなっていることがわかりましたが、開発者がこれを再現できないことに驚きましたが、それは常にビルドボックスで発生しました.

私たちのテストでは、これらの種類のものをキャッチし、意図しないところで == を防止しようとするのは良いことですが、Java に Long や String などをインターンしないように指示する方法を知りません...これを処理するためにJVMに与えることができる設定はありますか?

4

2 に答える 2

8

この種の問題を検出する 1 つのオプションは、ビルド中にコードの静的分析を実行することです。FindBugsには、参照の等価性を検出する機能があると思います。

参照:疑わしい参照の比較

于 2013-09-05T16:50:22.657 に答える
0

簡単な Google 検索では何も表示されませんでしたが、Long キャッシュのサイズ (デフォルトは 256) を制御するコマンド ライン引数があると思います。これはおそらく 1 年前に StackOverflow で読んだものなので、SO に従う価値があります。それを見つけてテストマシンでゼロに設定できれば、この特定の問題をカバーできます。

見つかりました - SO question# 2974561 を見てください。@sunny による最後の方の回答。

新しい整数と valueOf

うーん、詳しく見ると、キャッシュを増やすことはできるようですが、減らすことはできないようです。したがって、これが機能するとは思わないでください。しかし、何かを理解できるかもしれません。

于 2013-09-05T17:52:30.227 に答える