Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

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

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...