黑马程序员技术交流社区

标题: 为什么输出的是数组的信息? [打印本页]

作者: bianbian18    时间: 2013-4-30 01:49
标题: 为什么输出的是数组的信息?
本帖最后由 bianbian18 于 2013-4-30 10:26 编辑

输入的密码都是abc。
第一种:
import java.io.*;
public class Demo
{
        public static void main(String args[])
        {
                Console con = System.console();
                char[] passw;
                passw = con.readPassword("输入密码:");
                System.out.println("密码是:"+passw);
        }
}
输出结果如下:
密码是:[C@131303f

第二种:
import java.io.*;
public class Demo
{
        public static void main(String args[])
        {
                Console con = System.console();
                char[] passw;
                passw = con.readPassword("输入密码:");
                System.out.print("密码是:");
                System.out.println(passw);

        }
}
输出结果如下:
密码是:abc


为什么第一种方式输出的不是密码而是数组的信息呢?:sleepy:
作者: 吴凯    时间: 2013-4-30 02:29
唉....同样费解,待楼下高手来指点
作者: 403383221    时间: 2013-4-30 08:29
众所周知,+号除了有加法功能外,最多的就是被用来连接字符串了,毕老师说过,任何数据与字符串相“+”,都会变成字符串。
对于char字符数组而言,就会调用自己的toString方法来返回一串字符串,数组是从Object哪里继承了tostring方法而没有重载,在规范中描述道“返回一个字符串,它包含了该对象所属类的名字,”@“符号以及表示对象散列码的一个无符号十六进制整数”,所以就有了我们那个丑陋的输出了。要正确的输出字符序列,我们可以先调用String.valueOf()方法返回一个字符串对象再进行输出(把字符数组先转化为字符串)。当然我们还可以将System.out.println("密码是"+passw);;分开两次来输出以达到目的效果,即:System.out.println("密码是");System.out.println(passw);
作者: 孙胜    时间: 2013-4-30 09:03
楼上正解你这样写就没有问题了
System.out.println("密码是:"+String.valueOf(passw));
作者: 刘沛霞    时间: 2013-4-30 09:28
char 是字节,String 是字符,你用string 字符串连接字节,它会自动转成string的相加的,如果不进行类型转换,就会变成你上面的结果。如 int 和double相加,会自动将结果值转成int类型。
作者: 8047107    时间: 2013-5-11 12:00
看来美女也是零基础的?
加个好友呗  一起努力
作者: 8047107    时间: 2013-5-11 12:02
貌似不是美女 但是好像武汉的呀




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2