public class Arcane {
static int x;
int y;
public Arcane(int x) {
int y = x + 1;
this.y = y;
}
public void increment() {
y += x;
}
public void print() {
System.out.println(y);
}
public static void main(String[] args) {
x = 5;
{
int x = 2;
Arcane t = new Arcane(x);
t.increment();
t.print();
}
}
}
It is in my understanding that the program prints out 8 but I cannot figure out why. I tried plugging in x=5.
First you put 5 to static variable x:
x = 5;Then you create yet another x valid in inner scope. Its value is 2 and you send it to constructor of Arcane that calculates
yasx+1(local x), i.e.2+1=3.At this point
Now you call increment that calculates new value of
yasy+=x, that is exactly asy = y + x,. i.e.3+5=8.Then you print y that holds 8.
I hope this helps.