The difference is that compiler usually produces a directly usable artifact (executable binary of some sort). Example: C (produces binary), C# (produces bytecode).
- compiles code to a lower level code.
"Developer code" -> "Machine code"
Java -> bytecode
- compiles code to same level of code/abstraction.
"Developer code" -> "Another developer code or version"