Почему бы и нет?
Предполагая
class C {
private final int taxos = 4;
public int test() {
final int a = 7;
final int b = this.taxos;
return a % b;
}
}
вызов, подобный c.test()
, где c
объявлен как C
, должен бросить, когда c
это null
. Ваш метод эквивалентен
public int test() {
return 3; // `7 % 4`
}
, поскольку вы работаете только с константами. Если test
не указано c, проверка должна быть выполнена. Обычно это делается неявно, когда к полю обращаются или когда вызывается нестатический c метод, но вы этого не делаете. Так что нужна явная проверка. Одна возможность - вызвать Objects.requireNonNull
.
Байт-код
Не забывайте, что байт-код в основном не имеет значения для производительности. Задача javac
- создать некоторый байт-код, выполнение которого соответствует вашему исходному коду. Он не предназначен для любых оптимизаций, поскольку оптимизированный код обычно длиннее и сложнее для анализа, в то время как байт-код на самом деле является исходным кодом для оптимизирующего JIT-компилятора. Таким образом, javac
, как ожидается, будет упрощать ....
Производительность
В моем профилировщике я видел, что 1% расходует процессор в java.util.Objects.requireNonNull
Я бы сначала обвинил профилировщика. Профилирование Java довольно сложно, и вы никогда не сможете ожидать идеальных результатов.
Возможно, вам следует попробовать сделать метод stati c. Обязательно прочитайте эту статью о проверках на ноль .