Есть ли вероятность того, что Java-компилятор возится с этим?
Теоретически да.Это математически возможно.
На практике ... более вероятно, что вы либо что-то упустили, либо у вас неправильное представление о каком-либо аспекте поведения Java.(Например, что делает программу поточно-ориентированной.)
Java используется миллионами программистов.Ошибки действительно обнаруживаются, но вероятность того, что любое непредвиденное / непонятное поведение в каком-то "обычном" коде связано с ошибкой компилятора, ничтожна.
(И, кроме того, если вы не можете предоставить доказательства предполагаемогоошибка компилятора в виде воспроизводимого тестового примера:
- вы не сможете сообщить об этом / получить исправление, а
- у вас не будет логическая основа для веры в то, что ваш обходной путь на самом деле лечит проблему. (Это может быть просто уменьшение вероятности или перемещение в другое место).
Кодесть один метод, который имеет код, подобный приведенному ниже:
(Это реальный код? Или он просто «как»? И если он просто «как», то чем он отличается отреальный код?)
private LocaleCodeValue getDefaultLocaleCodeValue(String code) {
String value = code;
if (code.contains("_"))
value = code.substring(0, code.lastIndexOf("_"));
return new LocaleCodeValue(code, value);
}
Возможность № 0. Проблема в том, что ввод или вывод этого метода не тот, который вы думаете. (Принимая во внимание, что если приложение многопоточное, использование отладчика или рекламыТрассировка или регистрация могут изменить поведение приложения.Таким образом, чтобы скрыть фактические доказательства.)
Возможность # 1.Проблема в конструкторе LocaleCodeValue
.
Возможность # 2.Гомоглифы: при некоторых обстоятельствах вы получаете некоторый персонаж, который выглядит как '_'
символ, но на самом деле это не так.
Возможность № 3.Где-то еще в базе кода есть некоторый код, который использует мерзкое отражение, чтобы изменить значения String
, и это просто происходит, чтобы изменить значение code
.Это может даже не происходить во время вызова этого метода ... если это происходит в другом потоке.
Возможность # 4.Где-то в кодовой базе вызывается какой-то ошибочный нативный код, и это что-то попирает.
Возможность # 5.Аппаратная ошибка.
Возможность # 6.Код, который вы запускаете, не соответствует исходному коду, который вы просматриваете;Например, у вас есть проблемы с процессами сборки или развертывания.
и
Возможность # 7.Существует небольшая, но важная разница между тем, что вы нам показали, и реальным кодом.
Моя ставка будет на # 0, # 6 или # 7 (за исключением того, что вы только что сказали не # 7).