Espacio de comentarios demasiado pequeño, así que aquí hay más información para usted sobre el uso de static final
. Como dije en mi comentario al Andrzej's answer, solo las primitivas y String
se compilan directamente en el código como literales.Para demostrar esto, intente lo siguiente:
Se puede ver esto en acción mediante la creación de tres clases (en archivos separados):
public class DisplayValue {
private String value;
public DisplayValue(String value) {
this.value = value;
}
public String toString() {
return value;
}
}
public class Constants {
public static final int INT_VALUE = 0;
public static final DisplayValue VALUE = new DisplayValue("A");
}
public class Test {
public static void main(String[] args) {
System.out.println("Int = " + Constants.INT_VALUE);
System.out.println("Value = " + Constants.VALUE);
}
}
compilarlas y ejecución de prueba, que imprime:
Int = 0
Value = A
Ahora, cambie Constants
para tener un valor diferente para cada uno y simplemente compile la clase Constants
. Cuando ejecuta Test
nuevamente (sin volver a compilar el archivo de clase) todavía imprime el valor anterior para INT_VALUE
pero no VALUE
. Por ejemplo:
public class Constants {
public static final int INT_VALUE = 2;
public static final DisplayValue VALUE = new DisplayValue("X");
}
Ejecutar prueba sin tener que recompilar Test.java
:
Int = 0
Value = X
Tenga en cuenta que cualquier otro tipo que se utiliza con static final
se mantiene como referencia.
similar a C/C++ #if
/#endif
, una constante literal o uno definido a través de static final
con primitivas, utilizado en una condición normal Java if
y evalúa a false
hará que el compilador para despojar el código de bytes de las normas dentro de la if
bloque (no se generarán).
private static final boolean DEBUG = false;
if (DEBUG) {
...code here...
}
El código en "... código aquí ..." no se compilará en el código de bytes. Pero si cambió DEBUG
a true
, entonces sería.
En C++ moderno debe usar una constante tipada en lugar de una #define para eso –
Sí, #define tiene estilo C. En C++ use const en su lugar. Ver el libro "Effective C++" de Scott Meyers, artículo 1. – Jabba