escribí dos métodos para comprobar su desempeño para'...! = Null' o 'null! = ....' mejor rendimiento?
public class Test1 {
private String value;
public void notNull(){
if(value != null) {
//do something
}
}
public void nullNot(){
if(null != value) {
//do something
}
}
}
y comprueba que es el código de bytes después de compilar
public void notNull();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: getfield #2; //Field value:Ljava/lang/String;
4: ifnull 7
7: return
LineNumberTable:
line 6: 0
line 9: 7
StackMapTable: number_of_entries = 1
frame_type = 7 /* same */
public void nullNot();
Code:
Stack=2, Locals=1, Args_size=1
0: aconst_null
1: aload_0
2: getfield #2; //Field value:Ljava/lang/String;
5: if_acmpeq 8
8: return
LineNumberTable:
line 12: 0
line 15: 8
StackMapTable: number_of_entries = 1
frame_type = 8 /* same */
}
aquí dos códigos de operación se utilizan para implementar la condición if: en el primer caso se utilizan ifnull- comprobar que el valor superior de la pila es nulo-, y en el segundo caso usar if_acmpeq- comprobar que los dos valores superiores son iguales en la pila-
, ¿afectará esto al rendimiento? (esto me ayudará a probar que la primera implementación de null es buena en cuanto a rendimiento y legibilidad :))
La respuesta de polygene es la que debes escuchar. pero si realmente cree que la diferencia es importante, ejecute cada versión un billón de veces más o menos, y vea si hay alguna diferencia mensurable. luego regresa y nos cuenta sobre eso. –
¿Por qué es importante? ¿Su programa tiene solo 3 líneas de longitud, por lo que importa tanto qué tan rápido o lento se ejecute una única instrucción if? –
Mientras estamos en el tema, me gustaría probar que poner la llave de apertura en la misma línea que el condicional es más eficiente que otros estilos de corsé. –