Pregunta

Editado esta pregunta debido a mis malos ejemplos .. Aquí está mi pregunta actualización:

Would la siguiente sea igual en la asignación de velocidad y la memoria:

int b;
for (int i = 0; i < 1000; i++)
    b = i;

y

for (int i = 0; i < 1000; i++)
    int b = i;
¿Fue útil?

Solución

No, no lo haría.

En el primer caso, usted tiene una variable que se asigna 1000 valores diferentes -. Y llegar a ser capaces de hacerse con el último valor (999) después de que el constructor ha completado

En el segundo caso que está llamando un método esencialmente no-op 1000 veces. El segundo método no tiene efectos secundarios y no tiene ningún valor de retorno, por lo que es inútil. La variable local solamente "existe" para la duración de la llamada al método, mientras que la variable de instancia en el primer ejemplo es parte del objeto, por lo vivirá.

Tenga en cuenta que esto no se limita a las primitivas -. Cualquier otro tipo se comportaría de la misma manera también

Otros consejos

  • Sí. Ambos son totalmente inútiles.
  • No. tamaño Instancia de Class1 es mayor que el tamaño de instancia de clase 2, debido a la variable miembro.

La respuesta depende de a qué se refiere al decir "igual" =)

No .

  • En Class1 la a variable es un campo, accesible por todos los métodos de la clase.
  • En Class2 este no es el caso: a es una variable local dentro de la assign método. Después de acabados assign, el valor de a se descarta.

No, uno tiene una variable de instancia a (Class1), y uno no tiene.

En el primer caso que ya ha declarado B como un int y su valor se actualiza cada vez que se ejecuta un lazo. En el segundo, b se declara y se inicializa con el valor de i cada vez que se ejecuta el bucle. No estoy 100% seguro pero creo que el segundo caso es más intensivo de la memoria, pero no creo que la diferencia de velocidad sería notable.

Vale la pena señalar que cualquier pena compilador de su sal, y creo firmemente el JIT en un valor de un montón de sal, que acaba de dejar de lado el espacio para la "b" Una vez en el segundo caso, es decir, la fase de 'declaración' no tendría sentido .

¿Has probado esto? Ni siquiera se compila!

for (int i = 0; i < 1000; i++)
    int b = i;

mensajes de error del compilador:

Example.java:4: '.class' expected
                    int b = i;
                        ^
Example.java:4: not a statement
                    int b = i;
                    ^
Example.java:4: illegal start of expression
                    int b = i;
                          ^

El cuerpo de un bucle debe contener al menos un comunicado. Una declaración de variables no es una declaración, por lo que un bucle con sólo una declaración de variable no es válido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top