next()方法和nextLine()方法的本质作用是移动指针,hasNext()方法和hasNextLine()方法的作用是判断当前指针指向的有没有内容,有就返回true,没有就阻塞
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean a = scanner.hasNext();
System.out.println(a);
String b = scanner.next();
System.out.println(b);
}
}
Scanner scanner = new Scanner(System.in);
这行代码就是new一个输入的对象,Java是面向对象的语言,啥操作都要对象来执行,因此这里要new一个对象出来,参数是System.in说明你需要在控制台输入数据。但执行这一句时,并不会去让你输入数据,因为这里仅仅是声明了一个对象。真正要你去控制台输入数据是这个对象调用hasNext()方法或者next()方法。
boolean a = scanner.hasNext();
当代码运行完这一句的时候,也就是当对象调用hasnext()方法时,你需要在IDEA的控制台输入数据了,输入之后,这些数据保存在一个缓冲区中,这个缓冲区的开始位置就是这个scanner.hasNext() ,如果这个缓冲区当前指针指向的地方有数据,那么这个方法就会返回true,如果没有数据,注意注意它不会返回false,而是阻塞!!!一定要记住,不会返回false,不会返回false,而是阻塞,而是阻塞
String b = scanner.next();
注意注意,这里的next()方法和nextLine()方法不一样,next()方法是碰到空格,回车,就会执行这个代码,返回指向的内容,然后把指针指向下一个有数据的位置,相当于在控制台中碰到了一个空格,就执行了一次回车操作。然而nextLine()这个方法,它只认回车,不认空格。只有回车时,才相当于执行了nextLine()方法,然后返回你输入的这一行内容,然后把指针指向下一行位置