控制台输入:asdf,为什么结果是false?求Scanner的具体解释
public class StringTest {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String s1="asdf";
String s2=scan.next();
System.out.println(s1==s2);
}
}
因为System.in是标准控制台输入字符流,这样输入的东西都是以流式传输,当控制台读到控制台输入的流后,
会用当前系统默认编码对流进行字符编码获取字符串,形式如String s = new String(byte[], Charset.defaultCharset());
这时候生成的是一个new出来的字符串对象,引用地址就发生了改变,且其值不会出现在字符串常量池中,如果想要值new出来的
string对象的值也进行常量池,可以调用方法intern进行刷入。
希望可以帮到你。
那个比较改成:System.out.println(s1.equals(s2));,这个是比较两个字符串相等,而“==”是比较两个字符串的内存地址是不是相同
这两个不是同一个对象。
String 不属于基本类型。基本类型可以进行==比较。 String是引用类型的。==比较的是对象的地址。equals比较的是两个对象的值。
scan。next获得字符串是new 出来的新串了吧,不会指向常量池的的字符串吧,猜的
字符串比较不能用==