Una pregunta rápida sobre primitivas
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;
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
laa
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 laassign
método. Después de acabadosassign
, el valor dea
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.