Я вникал в то, как класс Integer фактически использует кешированные объекты, и я нашел код ниже в методе Integer.valueOf:
public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
Мой вопрос:
-  Какая польза от 
assert IntegerCache.high >= 127;Я читал, что assert обеспечивает эффективный способ обнаружения и исправления программ Ошибки. Но это код времени выполнения, поэтому зачем кому-то использовать assert? -  И когда он бросит 
AssertionErrorв этом сценарии?