This discussion is archived
5 Replies Latest reply: Oct 13, 2009 3:42 PM by EJP RSS

(Final) primitive used inside anonymous block

807580 Newbie
Currently Being Moderated
I found a strange behavior when I use primitive variable inside the anonymous code.
public class Test {
     private Runnable printer;
     public void print(final int i){
          if (printer == null){
               printer = new Runnable() {
                    public void run() {
          new Thread(printer).run();
     public static final void main(String[] aregs){
          Test t = new Test();
          for (int i = 0; i <10 ; i++){
It is always printing 0!!
It keeps the first value of the variable when I make the printer as member! I know that the variable [i] is marked as final,*
But even though; (final) makes sure that this parameter will not change, so logically it should print [i] according to the passed value, am I right? Can somebody explain?