java输入字符串判断的怪问题()
下面的程序想判读输入的字符串是不是"y"
上述程序输出只有
string=输入地内容
就什么都没有了.......
问什么?
import java.io.*;
class App3_13
{
public static void main(String args[]) throws
IOException {
BufferedReader buf;
String str="aaa";
buf=new BufferedReader(new InputStreamReader(System.in));
System.out.print("Input a string:");
str = buf.readLine();
System.out.println("string="+str);
if(str=="y")
System.out.println("yes");
else
System.out.println("no");
}
}
------解决方案--------------------假如输入的是y,程序除了输出String = y 外,还输出了 no
如果你要判断输入的是否为y,应该把 if(str=="y") 改成 if(str.equals("y"))
------解决方案--------------------应该还会输出一个Y吧.
字符串的比较应该使用equals方法
------解决方案--------------------if(str=="y") 修改为
if("y".equals(str))
不建议修改为改成 if(str.equals("y"))
------解决方案--------------------1楼说的对
------解决方案--------------------如果比较对象是否 内容相同 用 object1.equals(object2)
如果比较是否是同一个对象,或基本类型比较请用 ==
------解决方案--------------------==是比较两者是不是相同
EQUALS是比较两者的内容是不是相同
------解决方案--------------------同意三楼!
equals()应该那样用!
------解决方案-------------------- 请问三楼的理由是什么?
------解决方案--------------------str="y"
和后面直接数"y"
在内存里是同一个对象,所以==判断的结果为true
补充:
假如你用str=new String("y");
再做==判断,结果就是false了,因为new全新创造了一个String对象
--------------------------
总结:所有的String直接数,JVM会对内存里的String直接数做比较,如果有相同的话,就把String变量指向已有的String对象(不再生产新对象了)
优点:假设你做一个
for(int i=0;i<10000;i++)
String tmp="tmp string"+i;
循环,JVM并不会为字符串"tmp string"创建10000次对象,而只是使用第一次创建的"tmp string"对象.
------解决方案--------------------import java.io.*;
public class Test
{
public static void main(String args[])throws Exception
{
String str=;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
str = in.readLine();
if(str.equals("y"))
{
System.out.println("yes");
}
else
{
System.out.println("no");
}
}
}
str不要初始值,就可以达到你要的目的,要是str给初始值,那就输入什么直都是no