2011-07-08 10 views
12

Llamo mucho la longitud de un conjunto determinado y me preguntaba si es mejor seguir llamándolo varias veces (más de 50 veces en la actualidad, pero sigue creciendo) o es mejor simplemente almacenar la longitud en un número entero y usa ese entero cada vez.En cuanto a rendimiento, ¿es mejor llamar la longitud de una matriz dada cada vez o almacenar la longitud en una variable y llamar esa variable cada vez?

Si no tengo muy claro en lo que estoy diciendo, tenga en cuenta lo siguiente:

Tengo una matriz de cadenas:

String[] str = new String[500]; //The length is actually dynamic, not static 

Por supuesto, poner un poco de los valores en ella, pero la palabra el longitud de la cuerda todo el tiempo a lo largo de mi solicitud:

int a = str.length; 
int b = str.length; 
int c = str.length; 
int d = str.length; 
int e = str.length; 

y así sucesivamente ... así que es mejor hacer esto: (se refiere a rendimiento, no se preocupan por la memoria como mucho)

int length = str.length; 
    int a = length; 
    int b = length; 
    int c = length; 
    int d = length; 
    int e = length; 

Gracias.

+1

Intenta medirlo. Descubrirá que recuperar el valor de un atributo 50 veces, o incluso algunas miles de veces, ni siquiera será medible. –

+0

¿Qué quiere decir con "longitud es dinámica"? No hay matrices dinámicas en Java. –

+1

Creo que quiere decir que no se conoce en tiempo de compilación (es decir, que no puede usar 500 en todas partes). – sshannin

Respuesta

16

No hay diferencia. No se llama a un método cuando se accede a la longitud de la matriz. Usted acaba de leer un campo interno. Incluso si llamaras a un método, la diferencia sería insignificante con las JVM actuales.

+1

+1: Métodos como String.length() se insertan, por lo que incluso no hacen ninguna diferencia. –

+1

Gracias por la aclaración. Esto tiene sentido. – ROFLwTIME

2

¿Cuál cree que haría el código más claro?

La JVM es probable que optimizar el código para hacer lo mismo. Incluso si no lo hizo, la diferencia es probable que sea menor a 1 nano-segundo.

3

Array.length está accediendo a un campo en el objeto de matriz, por lo que no debería tener ningún impacto en el rendimiento.

Cuestiones relacionadas