I use Cobertura. I prefer it to Emma because it does branch coverage as well as line coverage and because I think the HTML reports it generates are nicer.
An example of why branch coverage is important is code that uses the ternary operator (a ? b : c). If the tool does only line coverage, this statement will be considered 100% covered even if it always executes the same branch. With branch coverage it will be only 50% covered unless both branches have been executed.
Code coverage doesn't directly help you write better code, but it does help you write better tests, which in turn help you write better code. Code coverage will uncover execution paths that are not being exercised by your tests. As well as indicating where you can improve your tests, this can also identify pieces of code that can be removed (since they are not being used).
If you use a continuous integration tool, such as Hudson, you can plot your coverage scores over time, which can be useful for indentifying trends.