2010-01-18 13 views
9

Excepto el alcance y las diferencias de almacenamiento, ¿hay alguna otra diferencia importante entre la instancia y las variables locales en Java?¿cuál es la diferencia entre las variables locales y de instancia en Java

+0

Dup? http://stackoverflow.com/questions/1794141/java-instance-variables-vs-local-variables –

+3

"a excepción de las diferencias, ¿cuáles son las diferencias?" :-) ¿Qué tipo de diferencias estás buscando? optimizaciones y vida útil o algo más? – Fredrik

Respuesta

23

Una cosa extra que se me ocurre:

Las variables de instancia se dan valores por defecto, es decir nula si se trata de una referencia de objeto, 0 si se trata de un int.

Las variables locales no obtienen los valores predeterminados y, por lo tanto, deben inicializarse explícitamente (y el compilador generalmente se queja si no lo hace).

7

No, prácticamente lo cubriste. Una variable de instancia pertenece a una instancia de una clase, una variable local pertenece a un marco de pila.

Las variables de instancia se inicializan a los valores predeterminados, pero en general es una buena práctica usar inicializaciones explícitas de todos modos.

33

Las principales diferencias que veo son en su:

Alcance: Las variables locales son visibles sólo en el método o bloque en que se declaran mientras que las variables de instancia pueden sido vistos por todos los métodos de la clase.

Lugar donde se declaran: Las variables locales se declaran dentro de un método o un bloque mientras que las variables de instancia dentro de una clase pero fuera de un método.

Tiempo de existencia: Las variables locales se crean cuando se llama y se destruye un método cuando el método sale, mientras que las variables de instancia se crean usando new y destruidas por el recolector de basura cuando no se hace referencia a ellas.

Acceso: No se puede acceder a las variables locales, mientras que las variables de instancia se pueden acceder si se declaran como públicas.

Donde se declaran: Las variables locales se declaran en un método o en un bloque antes de llamarlas, mientras que las variables de instancia se pueden declarar en cualquier parte del nivel de clase (incluso después de su uso).

EDIT:

Y se me olvidó mencionar que las variables de instancia siempre tienen valor, incluso si no está asignado por el código (entonces tendrán, por ejemplo, NULL, 0, 0,0, false). Para las variables locales, el código debe tener un valor asignado; de lo contrario, el compilador genera un error.

+0

¿Qué pretendes ser la diferencia entre "Alcance" y "Tiempo de existencia" y "Dónde están declarados"? Además, no entiendo la importancia de su sección de "acceso": ¿qué significaría "acceder" a un local? – danben

+0

@danben: el acceso no tiene sentido para una variable local. es por eso que es una diferencia de las variables de instancia. Estoy de acuerdo en que es una diferencia trivial, ¡pero aun así ...! lo mismo vale para el "Donde están declarados". En cuanto al alcance y el tiempo de existencia (o duración), son términos completamente diferentes.Y también olvidé agregar uno más, que editaré y agregaré ahora. – Alex

0

principal la diferencia es variables de instancia obtener valores predeterminados como int valor get zero char obtiene nulo pero no las variables locales. Puede dejar la variable de instancia no inicializada pero, como las variables locales deben inicializarse, de lo contrario obtendrá un error de compilación.

7

Otra diferencia, no tiene que preocuparse por el acceso concurrente a las variables locales; mientras que lo hace con variables de instancia en un entorno de subprocesos múltiples.

1

Aparte de todo lo que ya se ha mencionado aquí, me gustaría señalar que las variables locales son un poco más rápidas de acceder para la JVM. La JVM tiene más trabajo por hacer para leer o escribir una variable de instancia en comparación con una variable local.Esto sigue siendo cierto para la JVM del servidor de Hotspot actual porque no es un problema de optimización de VM, sino que se debe al hecho de que una variable de instancia es visible fuera del método y, por lo tanto, se puede acceder desde otros subprocesos mientras se ejecuta el método.

+0

¿Puede proporcionar referencias que demuestren que esto es cierto? Dudo que se lea una variable local final más rápida que el campo de instancia final. – user2418306

0

Las variables definidas dentro de los métodos, constructores o bloques se denominan variables locales. La variable se declarará e inicializará dentro del método y se destruirá cuando el método se haya completado.

Las variables de instancia son variables dentro de una clase pero fuera de cualquier método. Estas variables se instancian cuando se carga la clase.

+0

Las variables de instancia se instancian cuando se construye una instancia de la clase. – EJP

2

La variable local:

  • se declara dentro de un método/constructor o dentro de un bloque (entre llaves)
  • debe ser inicializado antes de su uso, de lo contrario no se compilará.

variable de instancia:

  • se declara dentro de una clase.
  • inicialización no es obligatoria: si se omite, que contiene el valor por defecto (0, 0,0, false, null, etc.)
1

Aparte de todas las diferencias antes mencionadas, me gustaría señalar una diferencia más que, variables de instancia pueden tener modificadores de acceso (como privado, público, protegido, etc.), pero variables locales no tendrán ningún modificador de acceso.

0

Las variables locales se declaran dentro de un método.

Las variables de instancia se declaran dentro de una clase pero no dentro de un método.

Las variables locales no obtienen un valor predeterminado. El compilador se queja si intenta usar una variable local antes de que la variable se inicialice.

Sin embargo, las variables de instancia siempre obtienen un valor predeterminado. Si no asigna explícitamente un valor a una variable de instancia, la variable de instancia todavía tiene un valor.

enteros 0

puntos flotantes 0

booleanas falsas

referencias nulas

Cuestiones relacionadas