Answer : BufferedReader Since Java 1.1 Throws checked exceptions Can read chars, char arrays, and lines Fast Scanner Since Java 1.5 Doesn't throw checked exceptions Can read lines, whitespace-delimited tokens, regex-delimited tokens, and numbers Difficult to read single characters Console Since Java 1.6 Doesn't throw checked exceptions Can read lines Underlying reader can read chars and char arrays (stops at line bounds) Not always available (e.g. Eclipse) Can read passwords (i.e. read without displaying the characters) Recommendation: Scanner The methods for reading numbers are very useful. The exceptions are unchecked, so you do not have to write boilerplate try/catch blocks. Console class is implemented in a platform independent way to handle the console input for different Os. All OS has a console/shell but they are quite different in implementation. So Console class gives you a Java platform independent runtime class to access things like