What are all num referring to ?

class Sample {
  int num;

  void method() {
    num = 1;
    int num = num = 2;
    num = 3;
  }
}

Recommended Answers

The scope of a local variable declaration in a block (§14.4) is the rest of the block in which the declaration appears (Java Language Spec 6.3)

So the exibited behaviour is what the JLS requires, depending on how you see the multiple assignment, but 4.12.3 seems to clarify …

Jump to Post

All 5 Replies

Re: Same variables in a class function 80 80

If I compiled this with say GCC and the usual optimizer settings those lines 5, 6 and 7 would vanish along with method so the variable num would never exist at runtime. So there is no num so there is nothing being referred to in this example.

Re: Same variables in a class function 80 80
class Sample {
  int num;
  void method() {
    num = 1; // Sample.num is set to 1
    int num = num = 2; // num in method is set to 2, the second num is num in method
    num = 3; // num in method is set to 3
  }
}

I tried the code in https://www.tutorialspoint.com/compile_cpp_online.php

class Sample {
  public:
    int num;
  int method() {
    num = 1;
    int num = num = 2;
    num = 3;
    return num;
  }
};
Sample s;
cout << s.num << endl; 
cout << s.method() << endl;
cout << s.num << endl; 

Output:
0
3
1

but your tag is Java, so it should be interpreted as Java code. I will try it in Java.

commented: Nice work but you added code so my observation won't apply since you changed the code. +15
Re: Same variables in a class function 80 80

Now in Java:

class Sample {
      public int num;
      public int method() {
        num = 1;
        int num = num = 2; // in Java: second num seems to be public num
        num = 3;
        return num;  
      }
    }
   Sample s = new Sample();
   System.out.println(s.num);
   System.out.println(s.method());
   System.out.println(s.num);

Output:
0
3
2
So, the output is different to C++.

Re: Same variables in a class function 80 80

The scope of a local variable declaration in a block (§14.4) is the rest of the block in which the declaration appears (Java Language Spec 6.3)

So the exibited behaviour is what the JLS requires, depending on how you see the multiple assignment, but 4.12.3 seems to clarify that

a local variable could always be regarded as being created when its local variable declaration statement is executed.

because the declaration/intialisation will be executed after the assignment to its right.

Re: Same variables in a class function 80 80

Thanks guys for the explanation

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.19 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.