黑马程序员技术交流社区

标题: 数据的转换的疑问 [打印本页]

作者: 长跑※终点    时间: 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