Java (我不知道如何比较字符串)使用while循环写入文件

Java (我不知道如何比较字符串)使用while循环写入文件,java,string,Java,String,我编写这个程序的目的是创建一个简单的程序,逐行从终端获取输入,并以相同的方式将其存储到文件中,在用户输入“end”时结束 我不明白为什么。。。 1) 当用户输入“end”时,while循环不会结束 2) 数据没有写入文件(我已经检查过了,无论出于什么原因都没有写入) 编辑:答案已经找到了!对于那些刚到的人,我的情况应该是这样的!温度等于(“结束”) 检查两个字符串是否相等时,请使用相等方法,即temp.equals(“end”) 这就是while循环没有结束的原因使用等于而不是 temp!="e

我编写这个程序的目的是创建一个简单的程序,逐行从终端获取输入,并以相同的方式将其存储到文件中,在用户输入“end”时结束

我不明白为什么。。。 1) 当用户输入“end”时,while循环不会结束 2) 数据没有写入文件(我已经检查过了,无论出于什么原因都没有写入)

编辑:答案已经找到了!对于那些刚到的人,我的情况应该是这样的!温度等于(“结束”)


检查两个字符串是否相等时,请使用相等方法,即
temp.equals(“end”)

这就是while循环没有结束的原因

使用
等于
而不是

temp!="end" // temp.equals("end")
关闭前刷新输出流,因为默认情况下,创建PrintWriter对象时不会自动刷新行。因此

outfile.flush()
或者在创建PrintWriter对象时,将其作为第二个参数传递,如下所示

PrintWriter outfile = new PrintWriter(new FileWriter(filename), true);

while循环不会结束,因为您正在相互比较引用类型,而不是比较
字符串的值。这就是说,

while( temp != "end" )
检查存储在
temp
中的
字符串的引用是否等于
“end”
的引用。因此,比较看起来有点像

java.lang.String@549f9afb != java.lang.String@583dad65
它的计算结果总是
true

为了比较两个
String
对象的值,需要在一个
String
上调用
equals
。因此,在你的情况下,你必须写:

while ( temp.equals( "end" ) )
PrintWriter
不会立即写入接收到的输出,而是将其存储,直到刷新为止。通过激活
autoFlush
,每次调用
println
后都会刷新PrintWriter。通过设置构造函数的
autoFlush
参数可以激活它

PrintWriter outfile = 
    new PrintWriter( new FileWriter( filename ), true );

关闭流也会刷新它。此外,自动刷新可能会对性能产生影响,尽管在这种情况下这并不重要。我同意自动刷新会带来额外的成本,这也是我提到刷新方法的原因。感谢大家提到我应该使用temp.equals(“end”),但是为什么我的方法不起作用呢?这是我的C++方法,这是我的第一语言。从我理解的,java是用C++来构建的,= =测试,用于引用相等,但是你想测试值相等(字符串的实际内容),为什么使用均衡器()@ BrutalAREC C比较将使用<代码> STRCMP < /代码>;C++发生了超载=,但语义不同于<>代码> STRCMP < /C>。Java(故意)不支持运算符重载。
PrintWriter outfile = 
    new PrintWriter( new FileWriter( filename ), true );