now what sense does that make?
I am not talking about variables. I must have written that I used some approach of solving such shadowing and reference related problems. Its nothing to do with Java

don't treat it as Java statement.
Answer lies in the fact
2-> 66*
*-> updated because object passed in parameters i.e. We passed main's voo.doo object passed to the method, then that object is modified in that method and taken new value 66.
Take this trace:
1. voo.voolish(voo.doo) =>Passing main's voo.doo object in the method.
2. void voolish(Doo doo) { => Here doo refers to main's voo.doo object
3. doo.doolet = 66; => Main's voo.doo.doolet attribute is modified to 66.
4. doo = new Doo(); A new object is created(Method level), previous reference changed, now doo is referring to new created object!!!
5. doo.doolet = 77; doolet got value 77(Completely new object).
6.System.out.print(doo.doolet); => 77 Printed on the screen.
7. Method level object vanished.
8 System.out.print(voo.doo.doolet); => refer to main's object which we changed at line 3, so the value 66.
Remember, if we pass object as parameter then we can change their state(means attributes) in the called method.