package java_course;
public class staticVsInstance {
static int x = 11;
private int y = 33;
public void method1(int x) {
staticVsInstance t = new staticVsInstance();
System.out.println("t.x "+t.x + " " +"t.y "+ t.y + " " +"x "+ x + " "+"y " + y);
this.x = 22;
this.y = 44;
System.out.println("t.x "+t.x + " " +"t.y "+ t.y + " " +"x "+ x + " "+"y " + y);
}
public static void main(String args[]) {
staticVsInstance obj1 = new staticVsInstance();
System.out.println(obj1.y);
obj1.method1(10);
System.out.println(obj1.y);
}
}
and the output is
33
t.x 11 t.y 33 x 10 y 33
t.x 22 t.y 33 x 10 y 44
44
Does this.y
refer to obj1.y
or t.y
in method1
?
Why hasn't changing this.y
any affect on t.y
?
y
is a global instance variable. When you call obj1.method1(10);
, this
in method1
refers to obj1
. So this.y
refer to obj1.y
in method1.
Why hasn't changing this.y any affect on t.y?
because this
refers to obj1
so you are changing instance variable of obj1
not t
.