Java プログラムで非常に奇妙な動作が見られます。失敗は再現できないため、元のログを参照するだけです。
クラスは次のようになります。
public class MyClass {
public static final String MY_CONSTANT_STRING = "This should never change";
public boolean checkEndsWithCS(String inString) {
return inString.endsWith(MY_CONSTANT_STRING);
}
public String getString() {
return "Some text '" + MY_CONSTANT_STRING + "' some more text";
}
}
ログを見ると、getString が "Some text '' some more text" を返し、checkEndsWithCS("These are not the chars you're looking for.") が true を返すケースが見られます。
この場合、MY_CONSTANT_STRING は "" であるとしか言えません。
他のクラスは MyClass を拡張しないため、より高いレベルのクラスでオーバーライドされることはありません。
ログにメモリ不足状態の兆候は見られません。これが最も可能性の高い原因のようです。
これは static final であるため、参照は変更されません。文字列は不変であるため、文字列は変更されません。
質問:
- これらはいつ実行されますか? 日食にブレークポイントを設定しましたが、ヒットすることはありません。
- 静的最終参照の不変文字列を変更する方法はありますか?
- そもそも文字列が割り当てられないようにする方法はありますか?
- 文字列または参照を含むメモリが他のオブジェクトまたはプロセスによって「破壊」される可能性はありますか?
- 私がこれについて正しい方法で考えていない他の微妙な落とし穴はありますか?
ここでの集合的な経験がこれを解き放つことができない場合、私はそれを私のデータに欠陥があるという兆候と見なし、その角度からそれを調べます.