Can the same identifier be used as an name for a local variable in two different methods?
Yes—the scopes will not overlap so there will be two local variables, one per method, each with the same name.
Although it is usually a bad idea, you can declare a formal parameter or a local variable with the same name as one of the instance variables. For example,
class CheckingAccount { . . . . private int balance; . . . . void processDeposit( int amount ) { int balance = 0; // New declaration of balance. balance = balance + amount ; // This uses the local variable, balance. } }
This is not a syntax error (although it is probably a logic error, a bug.)
The compiler will compile this code without complaint.
The second declaration of balance
(the one in red)
creates a local variable for the processDeposit
method.
The scope of this variable starts with its declaration and ends at the end of the method
(as with all local variables.)
So the next statement uses the local variable, not the instance variable.
When this modified method is called,
it will add amount to the local variable balance
,
and then return to the caller.
The local variable will no longer hold a value after the method has returned.
The instance variable will not have been changed.
Hint: Think of statements as looking "upward" from their own location to find each of their variables. The first one they see is the one they use. They can look outside of their "glass box" in any direction if they fail to find a variable inside their own method.
It is almost always a mistake to use the same name for an instance variable and for a local variable (or for a formal parameter). But it is not a sytax error, so the compiler will not warn you of impending doom.