Instancia JAVA vs variable local
import comp102x.IO;
public class testing {
private int x;
public testing(int x) {
x = x;
}
public static void main(String[] args) {
testing q1 = new testing(10);
IO.outputln(q1.x);
}
}
¿Por qué la salida es 0 en lugar de 10? Este es un script JAVA. El concepto de variables de instancia y variables locales es muy confuso para mí, ¿alguien puede ayudar a explicar?
davy.ai
La salida es 0 en lugar de 10 porque en el constructor de la clase
testing
, el parámetrox
se asigna a sí mismo en lugar de la variable de clase también llamadax
. Esto significa que la variable de instanciax
nunca recibe un valor y permanece en su valor predeterminado de 0.El concepto de variables de instancia y variables locales puede ser confuso, pero básicamente las variables de instancia se declaran a nivel de clase y pueden ser accesibles y modificables por cualquier método de la misma clase. Las variables locales se declaran dentro de métodos y solo pueden ser accesibles y modificables dentro de ese método. Cuando una variable local tiene el mismo nombre que una variable de instancia, la variable local tiene prioridad dentro del método, y para modificar la variable de instancia, es necesario utilizar la palabra clave
this
.En este caso, el parámetro de constructor
x
tiene el mismo nombre que la variable de instanciax
, por lo que para asignar el valor a la variable de instancia, el código debería modificarse de la siguiente manera:De esta manera, el valor de
x
pasado al constructor se asignará a la variable de instanciax
, lo que resultará en una salida de 10 en lugar de 0.