This is a topic that confuses me also, although I usually just take it as a matter of faith that it "just has to be".
...if the variables weren't final, you'd expect changes to be reflected both inside the method and inside the code in the anonymous class...
When you say this, what kind of changes are you talking about? Changing the object that the variable is referencing (i.e. myVar = otherFoo;) , or mutating the object that the variable is referencing (i.e. myVar.setBar(new Bar());) ?
[ March 20, 2006: Message edited by: Garrett Rowe ]