Are they two completely seperate variables?
Yes, they are. PrintStream
is a FilterOutputStream
. As such it wraps an OutputStream
object so that it can add behavior to it.
System.out
is referencing a PrintStream
object that is wrapping the OutputStream
(referenced by its own out
field) that represents the standard output.