What Rahul has less-than-nicely suggested is actually the best plan for understanding stuff like this. Get a piece of paper -- graph paper works nicely -- and create a column for each variable. If you use e2 = new Echo(), you'll need columns for e1.count, e2.count, and x. If you use e2 = e1, then you have to realize that e1.count and e2.count refer to the same variable -- since e1 and e2 are two different names for the same object -- and so you need only columns for count and x. Then start at the top, and at each line, write down the values of each variable. When the code branches somewhere, you follow the branch. Pretend you're the computer, and execute each line of code, keeping track of those variables. At the end,
you should come up with the same value the program does, and that's the best you can do in terms of "understanding." You see the steps the program takes, and you understand how it arrived at some value.
The line "e1.count = e1.count + 1" means to take the value of e1.count, add one to it, and store it back into e1.count; at the end, the value in e1.count is one larger than before.