Java循环输入0未终止问题:原因分析与解决方法
问题原因与解决方案
问题原因
在Java里,用!=或==比较字符串时,对比的是字符串对象的内存引用地址,而非字符串的实际内容。你通过Scanner读取的"0"和代码里的字面量"0"属于不同的对象(即使字符串常量池会缓存字面量,Scanner读取的输入是新创建的字符串对象),所以inputting != "0"的判断永远为true,循环无法终止。
修改方案
方式1:用equals()方法比较字符串内容
这是Java中比较字符串内容的标准写法,替换原有的循环条件:
import java.util.*; String inputting = ""; while(!inputting.equals("0")) { Scanner scan = new Scanner(System.in); inputting = scan.next(); System.out.println("Next"); System.out.println(inputting); }
方式2:用Objects.equals()避免空指针异常(更安全)
如果担心inputting为空触发NullPointerException,可以借助Objects.equals(),它会先处理空值判断:
import java.util.*; import java.util.Objects; String inputting = ""; while(!Objects.equals(inputting, "0")) { Scanner scan = new Scanner(System.in); inputting = scan.next(); System.out.println("Next"); System.out.println(inputting); }
额外优化
把Scanner对象的创建移到循环外,避免每次循环都重复创建对象,提升效率:
import java.util.*; Scanner scan = new Scanner(System.in); String inputting = ""; while(!inputting.equals("0")) { inputting = scan.next(); System.out.println("Next"); System.out.println(inputting); } scan.close(); // 使用完毕后关闭Scanner
内容的提问来源于stack exchange,提问作者Faruk Nergiz
相关产品推荐
相关产品推荐

