import java.io.*;
public class x {
public static void main(String[] args) {
try{
BufferedReader in = new BufferedReader(
            new InputStreamReader(System.in));
String x = "1"; System.out.println("Input:");
String y = in.readLine();
if(x == y)
    System.out.println("Yes");
else
System.out.println("No");
}
catch(IOException e){}
}
}
当变量x,y为int型时,输入1结果为Yes,当x,y为string型时输入1,结果是No,请问读入String时是还同时读入了回车吗?我用System.out.println(y + "!")输入y,结果是1!,如果真的把回车也读入了,那结果不是应该是
1

才对的吗?迷惑中,请大家给点支持。

解决方案 »

  1.   

    字符串的比较要用equals,因为String是对象,如果用==,比较的是对象的句柄。
      

  2.   

    同意楼上的 
    字符串的比较要用equals,比较内容
    ==是比较引用是否相同
      

  3.   

    所有数值的比较都是用==,他所比较的是数据是否相同
    String是java类,原始类Object的equals比较也是用==号==对于基本类型比较的是值是否相等,对对象比较的是引用,你上面的两个不同的对象,他们的引用所指向的地址当然是不同的equals在Object中也是直接使用==去比较,
    public boolean equals(Object obj) {
    return (this == obj);
    }
    但在各个继承中可以自已重写equals方法,
    如String类中
       public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
    return false;
    }
    return true;
        }
    }
    return false;
        }
    这样String类使用equals比较的就是两个字符串的值是否相同,
      

  4.   

    字符串的比较要用equals方法,因为String是对象,如果用==,比较的是对象的引用!