Does this decompile to the exact code the developer wrote (without comments etc...) ?
Or does this decompile to a usable Java code ?
Decompilation to java is still a lossy process; if you want a non-lossy process you can check out APKTool which will encode/decode Smali (a Dalvik VM representation/assembly lang). But then you have to learn Smali...
On top of that, using this approach you can edit and rebuild the apk. jd-gui and company are nice, but often times I prefer to just skip ahead to the smali and really know whats going on.