A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵阳 中级黑马   /  2012-7-15 18:47  /  1638 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Test
{
        public static void main(String[]args)
        {
                char[]arr={'a','s','f','h'};
                String[]str={"123","456","789"};
                String a=String.valueOf(arr);
                String b=String.valueOf(str);
                System.out.println("字符:"+a);
                System.out.println("字符串:"+b);
        }
}
为什么输出
D:\java\zuoye\zifuchuan>java  Test
字符:asfh
字符串:[Ljava.lang.String;@119dc16


为什么不输出123456789。而输出哈希值。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

倒序浏览
String.valueOf方法传入的参数有char数组类型的,但是没有String数组类型的,因此


String a=String.valueOf(arr);//在这里会转换成字符串
String b=String.valueOf(str);//在这里只会把str的地址值,也就是你说的哈希值转换成字符串存入b中。


你仔细看看valueOf方法的源代码就能明白的。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
static String valueOf(char[] data) 这个里面是char数组,在API里面的解释是:返回 char 数组参数的字符串表示形式。也就是char类型转换为String类型的,所以可以打印String类的数组,
而你下面的这个传入的是String 类型的字符串数组,也就是说你调用的是这个static String valueOf(Object obj) , 本身就是String类型 的还怎么转呢?所以打印出来就是
[Ljava.lang.String;@119dc16      String类型的哈希地址值,在这里他没有转换,上面那个他转换 了

回复 使用道具 举报
因为 String valueOf 方法对 他们的处理不相同 看源码就可以了:

   public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

public static String valueOf(char data[]) {
        return new String(data);
    }
回复 使用道具 举报


class  Test
{
        public static void main(String[]args)
        {
                char[]arr={'a','s','f','h'};
                String[]str={"123","456","789"};
                String a=String.valueOf(arr);
                String b=String.valueOf(str);   //你这里的方法应该是这个:valueOf(Object obj),你这里的传入的str是内存中String[]str={"123","456","789"};这个数组的地址值(哈希值)
                你又把String 类的变量 b 指向了这个哈希值,所以你下面打出来的也就是哈希值了

                System.out.println("字符:"+a);
                System.out.println("字符串:"+b);
        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
通过查看API文档,String类的方法valueOf(Char[] data)表示 返回 char 数组参数的字符串表示形式。这个很好理解,关键是:[Ljava.lang.String;@119dc16 这行输出结果,首先看下String类当中的方法valueOf(Object obj),此方法表示返回参数obj的字符串表示形式,从而会调用obj对象的toString()方法,此方法的描述是这样的:

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())。

而getClass().getName()方法会根据obj的类型返回相应的值,在些不赘述,可以看下类Class的getName()方法,就明白了。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class  Test
{
        public static void main(String[]args)
        {
                char[]arr={'a','s','f','h'};
                String[]str={"123","456","789"};
                String a=String.valueOf(arr);
                String b=String.valueOf(str);
                System.out.println("字符:"+a);
                System.out.println("字符串:"+b);
        }
}

String类的方法valueOf 返回 char 数组参数的字符串表示形式
String[]str={"123","456","789"};
  String b=String.valueOf(str);   //你这里的方法应该是这个:valueOf(Object obj),你这里的传入的str是内存中String[]str={"123","456","789"};这个数组中打印直接为哈希值;
如果你想打印123456789的话需要把这个字符串数组中的元素获取出来如:
package cn.itcast.Demo1;

class  Test
{
        public static void main(String[]args)
        {
                char[]arr={'a','s','f','h'};
                String[]str={"123","456","789"};
                String a=String.valueOf(arr);
//                String b=String.valueOf(str);
                System.out.println("字符:"+a);
               for(String string:str){
                       System.out.print(string);
               }
        }
}
回复 使用道具 举报
  1. class  Test
  2. {
  3.         public static void main(String[]args)
  4.         {
  5.                 char[]arr={'a','s','f','h'};
  6.                 String[]str={"123","456","789"};
  7.                 String a=String.valueOf(arr);
  8.                 String b=String.valueOf(str);//这儿调用的是String的public static String valueOf(Object obj)方法。
  9.                 System.out.println("字符:"+a);
  10.                 System.out.println("字符串:"+b);
  11.         }
  12. }
复制代码
public static String valueOf(Object obj) 返回 Object 参数的字符串表示形式。你的代码就会返回你的字符串数组的字符串表示形式,这时就会调用Object对象的toString方法,
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

[Ljava.lang.String;@119dc16
[Ljava.lang.String通过反射技术得到的要打印的对象的类型,119dc16,当前对象的哈希值的十六进制然后转换成int后的值。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马