黑马程序员技术交流社区
标题:
数据的转换的疑问
[打印本页]
作者:
长跑※终点
时间:
2014-8-6 01:29
标题:
数据的转换的疑问
本帖最后由 长跑※终点 于 2014-8-6 01:32 编辑
请问下,运行下面的代码。输入:ABCDabcd 的结果是:[C@5e55ab。是什么原因?哪位知道原因的吗?告诉下我,先谢了。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Test7 {
public static void main(String[] args) {
System.out.println("请输入一串英文字母,并以回车进行转换");
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
String s;
try {
while((s = bfr.readLine())!=null){
//先将拿到的字符串给变成字符数组,将每个字母都给拆分开来。
char[] ch =s.toCharArray();
for(int i = 0; i<ch.length; i++){
//判断该字符是否是小写字母,是的话就变成大写,再写回字符数组。
if(ch
>='a'&&ch
<='z'){
ch
= Character.toUpperCase(ch
);
//判断该字符是否是大写字母,是的话就变成小写,再写回字符数组。
}else if(ch
>='A'&&ch
<='Z'){
ch
= Character.toLowerCase(ch
);
}
}
/------------------------------------------------------------------------------------------------------------------------------------------------
//就是这两行!!!!!!
!!如果把这两行换成:bfw.write(ch);就正常了。这是什么原因呢?
//把输入流读取到的String转成char【】写入输出流就没有问题。
//但是把
输入流读取到的String转成char【】,再转成String写入输出流就出问题了。好奇怪。
String a = ch.toString();
bfw.write(a);
/-------------------------------------------------------------------------------------------------------------------------------------------------
bfw.newLine();
bfw.flush();
}
} catch (IOException e) {
System.out.println("转换失败");
}
try {
bfr.close();
bfw.close();
} catch (IOException e) {
System.out.println("流关闭出错");
}
}
}
作者:
依然超级赛亚人
时间:
2014-8-6 08:22
我想可能是这样的:ch虽然是引用类型的变量,它有toString()方法,但是它指向的数组中的
各个字符元素
并没有toString()方法。
我感觉这道题的问题在于,因为引用型变量ch指向的是数组在内存中的地址值,所以你调用它的toString()方法后,它得到的是地址值的字符串表示,然后你把这个字符串赋给a,a也是地址值,而不是它代表的具体字符串。要想把字符数组中的元素转化为字符串,不能用toString(),用构造函数转化法或者相应的静态函数转化法应该都行。也就是你把“String a = ch.toString(); ”换成String a= new String(ch);或者String a=String.valueOf(ch);应该都行,你可以试试看,结果好像没问题,我也就只理解到这种水平了,只能帮你到这了,呵呵。
作者:
masai158
时间:
2014-8-6 08:27
同上。使用String.valueOf(ch)。试一下。。。toString不一定返回的是你需要的字符串。但是String.valueOf(ch) 是肯定能将 字节字节数组转成字符串的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2