Код: Выделить всё
public class Test {
public static void use(Object[] x) {
}
public static void main(String[] args) {
Object[] x = null;
use(x);
}
}
Код: Выделить всё
public static void main(java.lang.String[]);
Code:
0: aconst_null
1: checkcast #20; //class "[Ljava/lang/Object;"
4: astore_1
5: aload_1
6: invokestatic #21; //Method use:([Ljava/lang/Object;)V
9: return
Код: Выделить всё
public static void main(java.lang.String[]);
Code:
0: aconst_null
1: astore_1
2: aload_1
3: invokestatic #2; //Method use:([Ljava/lang/Object;)V
6: return
Мои вопросы:
- Насколько мне известно, значение null можно назначить любому классу, включая массивы. Имеет ли вообще какой-либо смысл проверять известное нулевое значение?
- Есть ли лишнее checkcast влияет на производительность?
- Можно ли считать это ошибкой в компиляторе Eclipse Java?
Я могу частично ответить на (2), по крайней мере, так что касается JVM OpenJDK 1.6.0b22. Я выполнил простой тест с несколькими присвоениями значения null в ограниченном по времени цикле. Я не смог обнаружить какой-либо постоянной разницы в производительности, так или иначе.
Тем не менее, мой тест был достаточно простым, и любой полуприличный оптимизатор, вероятно, сделал бы его бесполезным. , поэтому это может не указывать на реальное применение. Я ожидал, что JVM всегда оптимизирует этот код операции checkcast, но это может быть не так.
Подробнее здесь: https://stackoverflow.com/questions/758 ... -from-null
Мобильная версия