【问题标题】:Java Standard System Input and Buffered ReaderJava 标准系统输入和缓冲读取器
【发布时间】:2014-03-21 02:18:16
【问题描述】:

在尝试测试此缓冲阅读器后

import java.io.*;


public class Test {

public static void main(String[] args) throws IOException{
    BufferedReader Br = new BufferedReader(new InputStreamReader(System.in));
    if (Br.readLine() == "one") print1();
    if (Br.readLine() == "two") print2();
}
public static void print1(){
    System.out.print("1");
}   
public static void print2(){
    System.out.print("2");
}
}

我可以输入的任何内容都无法打印。如果我将第一个“if”语句更改为

if (Br.readLine().startsWith("one") print1();

如果我输入“one”,它将打印“1”。为什么会这样?

【问题讨论】:

  • 不要将字符串与== 进行比较。请改用.equals()

标签: java io bufferedreader


【解决方案1】:

当您比较字符串时,您应该将== 更改为.equals(),因为.equals() 将字符串的内容相互比较或用于比较对象。 == 检查引用相等或用于比较原语。我在下面更改了您的代码:

if (Br.readLine().equals("one")) print1();
if (Br.readLine().equals("two")) print2();

【讨论】:

    【解决方案2】:
    if (Br.readLine() == "one") print1();
    if (Br.readLine() == "two") print2();
    

    == 正在比较两个不同字符串的引用,因为将两者视为不同的字符串对象。

    在 java 中,String 变量隐式转换为 String 对象,因为您的比较 "one" 现在是存储在某个位置的对象,而不是从 Br.readLine() 检索的 String 的位置所以简而言之,两个 referencec 都不相等.

    equals() 方法在这种情况下比较字符串对象值。

    if (Br.readLine().equals("one")) print1();
    if (Br.readLine().equals("two")) print2();
    

    在 int(原始类型)中 == 在这里工作正常,自动装箱和拆箱发生。

        Integer i=new Integer(5); 
        if(i==5){System.out.println("SAME");}
    

    【讨论】:

      最近更新 更多