Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
162 views
in Technique[技术] by (71.8m points)

java - Variable Scope Example Explanation

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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 y as x+1 (local x), i.e. 2+1=3. At this point

static x = 5;
y = 3;

Now you call increment that calculates new value of y as y+=x, that is exactly as y = y + x,. i.e. 3+5=8.

Then you print y that holds 8.

I hope this helps.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...