试图测试这个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”。为什么会这样?
答案 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");}