You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scanner类hasNext()与hasNextInt()为何在缓冲区空时阻塞等待输入?

Scanner的hasNext()为何会阻塞等待输入?

你对hasNext()/hasNextInt()的理解存在偏差,这类方法的实际行为和你预期的并不一致:

  • 当Scanner关联的输入源(比如控制台System.in)还有可能产生数据时,hasNext()不会直接返回false,而是会阻塞等待,直到从输入源读取到足够判断是否存在下一个令牌的数据,或者输入流被关闭。
  • 只有当输入流明确到达末尾(比如控制台输入按Ctrl+D/Unix或Ctrl+Z/Windows关闭流),hasNext()才会返回false。

看你提供的代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println(input.hasNext());
    }
}

运行时,Scanner绑定的是控制台输入流,此时缓冲区为空,但输入流并没有关闭——Scanner无法确定之后会不会有输入,所以会一直阻塞,直到你输入内容并回车。此时缓冲区有了可用令牌,hasNext()返回true,打印后程序结束。

hasNextInt()的逻辑完全一致:如果当前缓冲区没有可解析为int的令牌,它会阻塞等待输入,直到读到能判断是否为整数的内容,或者输入流关闭。

内容的提问来源于stack exchange,提问作者Nitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:34:54