Eclipse has an option to warn on assignment to a method’s parameter (inside the method), as in:
public void doFoo(int a){
if (a<0){
a=0; // this will generate a warning
}
// do stuff
}
Normally I try to activate (and heed) almost all available compiler warnings, but in this case I’m not really sure whether it’s worth it.
I see legitimate cases for changing a parameter in a method (e.g.: Allowing a parameter to be “unset” (e.g. null) and automatically substituting a default value), but few situations where it would cause problems, except that it might be a bit confusing to reassign a parameter in the middle of the method.
Do you use such warnings? Why / why not?
Note:
Avoiding this warning is of course equivalent to making the method parameter final (only then it’s a compiler error :-)). So this question Why should I use the keyword "final" on a method parameter in Java? might be related.
For me, as long as you do it early and clearly, it’s fine. As you say, doing it buried deep in four conditionals half-way into a 30-line function is less than ideal.
You also obviously have to be careful when doing this with object references, since calling methods on the object you were given may change its state and communicate information back to the caller, but of course if you’ve subbed in your own placeholder, that information is not communicated.
The flip side is that declaring a new variable and assigning the argument (or a default if argument needs defaulting) to it may well be clearer, and will almost certainly not be less efficient — any decent compiler (whether the primary compiler or a JIT) will optimize it out when feasible.