Well, there are many times where I won't necessarily start up the IDE to make a simple little change.
I'll just open the
java source file, make my small change, recompile from the command line, and run my program again.
In this case I'm not inside the IDE, so using the debugging facilities is not available to me.
Now that is by choice.. there are other times when IDE debugging is not available without (it seems) major pains. For example, if you develop
servlets or
EJB's, you need to package and deploy these classes... and unless you know how to make your IDE do remote and distributed debugging, System.out.println seems much simpler.
So having a diagnostic System.out.println("the new value is: " + variable) or System.out.println(" ** inside servlet init: about to initialize db connection") is pretty handy. For a trick on how to efficiently do this sort of thing, see:
http://www.javaranch.com/ubb/Forum33/HTML/003433.html But for other cases, I really do like the debug facility, being able to hover my cursor over a variable and peek inside it, being able to step through a program, line by line until it breaks. These are advantages too.
But my main reason for IDE's these days is CLASSPATH management and the popup help (type a dot and be presented with a list of what you could type next - saves typing)