由于Scanner.nextInt()(包括整数等)只是在输入流中读取相应类型的字符。
在下面这段代码中,当我们在键盘键入数字回车结束后,在缓冲区内只是扫描到了输入数字的位置,例如键盘输入的数字是 3 | 回车键,红色部分表明扫描的位置此时处于3与回车键中间。这是很重要的一个点
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num =scanner.nextInt();
}
}
假设我们在后面加入Scanner.next()或者Scanner.nextline()又会有什么区别呢?
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num =scanner.nextInt();
String s = scanner.next();
String s1 = scanner.nextLine();
System.out.println(666);
}
}
我们可以看到nextline()被跳过了,直接输出666
这正是因为nextline在缓冲区读取的方式与其他方法有所不同,我们来看一下区别
在int num =scanner.nextInt()这里键盘输入后的缓冲区是这样的
3 回车
之后nextInt在缓冲区的读取位置如下所示(前面说过了)
3 | 回车
到了String s = scanner.next()这里键盘输入后的缓冲区是这样的
3 | 回车 5 回车
之后next在缓冲区的读取位置如下所示
3 回车 5 | 回车 (next()方法会直接跳过回车,跑到5后面,然后返回5)
接下来 String s1 = scanner.nextLine()这里不会跳过回车,它会扫描回车5之后回车之前(包括回车)的所有字符,然后返回,但是不会返回回车(即换行符)。所以如图所示nextline()已经从缓冲区5之后回车之前的空,所以我们就无法在键盘输入。
3 回车 5 回车| 缓冲区的扫描位置也来到了回车后面
个人理解。有错误请更正!!谢谢