import java.io.*;
public class TestString {
public static void main(String[] args) throws Exception {
String str = "1";
String password = "x";
char s[] = str.toCharArray();
char p[] = password.toCharArray();
int n = s.length;
int m = p.length;
for (int k=0; k<n; ++k) {
int temp = s[k] + p[k%m];
s[k] = (char)temp;
}
System.out.println("1 : " + (int)s[0] + " " + s[0]); // 輸出: 1 : 169 ?
str = new String(s);
File file = new File("Test.txt");
FileWriter fw = new FileWriter(file);
fw.write(str);
fw.flush();
fw.close();
FileReader fr = new FileReader(file);
String sss = "";
int b;
while ((b=fr.read()) != -1) {
System.out.println("2 : " + b + " " + (char)b); // 輸出: 2 : 63 ?
sss = sss + (char)b;
}
System.out.println("str : " + str); // 輸出: str : ?
System.out.println("sss : " + sss); // 輸出: sss : ?
System.out.println(str.equals(sss)); // 輸出: false
}
}
測試了你的代碼,寫入的str是和字符串"?"的equals是false,所以讀出來的值與“?”equals時是false.
分析原因是equals方法判斷相等操作是以字符數組處理的,你定義str時是通過字符數組賦值的,如果你直接賦值str="?",再寫入文件,那麼讀取出來時再equals"?"就是true了。
可以研究下String的equals方法,猜測是while循環字符數組中返回false導致的。
並不是說你寫入文件和讀出文件的內容不同,而是字符串的equals方法可能有我們不知道的處理罷了。