Java标准系统输入和缓冲读卡器

时间:2014-03-21 02:18:16

标签: java io bufferedreader

试图测试这个Bufferered Reader

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”。为什么会这样?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

== 正在比较两个不相同的字符串的引用,因为它们都被视为不同的字符串对象。

在java String中隐式转换为String对象的变量作为比较"现在一个" 对象存储在某个位置,其他位置从Br.readLine()恢复的String位置简而言之,两个referencec都不是Equal。

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

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

在int(原始类型)中, == 在这里工作正常,可以进行AutoBoxing和UnBoxing。

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