黑马程序员技术交流社区

标题: 为什么输出结果是哈希值 [打印本页]

作者: 黑马斯巴达    时间: 2013-3-1 10:37
标题: 为什么输出结果是哈希值
本帖最后由 谢军 于 2013-3-16 14:14 编辑

package cn.itcast.day1;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception {
                // TODO Auto-generated method stub

                String str1="abc";
                Class cls1= str1.getClass();
                Class cls2=String.class;
                Class cls3=Class.forName("java.lang.String");
                System.out.println(cls1==cls2);
                System.out.println(cls1==cls3);
               
                System.out.println(cls1.isPrimitive());
                //new String (new StringBuffer("abc"));
                //String.class.getConstructorx(StringBuffer.class);
                Constructor constructor1=
                        String.class.getConstructor(StringBuffer.class);
                String str2=
                        (String) constructor1.newInstance(new StringBuffer("abc"));
        //在编译器时并不知道constructor的具体类型所以告诉编译器(String)
                System.out.println(str2.charAt(2));
               
                ReflectPoint pt1= new ReflectPoint(3,5);
                Field fieldY =pt1.getClass().getField("y");
                //filedY不是对象身上的变量。而是类上,要用它去取某个对象上对应的值
                System.out.println(fieldY.get(pt1));
                Field fieldX =pt1.getClass().getDeclaredField("x");
                //x是私有的直接用会报错,所以使用getDeclaredField方法
                fieldX.setAccessible(true);//暴力获取
                System.out.println(fieldX.get(pt1));
                Method methodCharAt= String.class.getMethod("charAt",int.class);
                System.out.println(methodCharAt.invoke(str1,1));
                //当invoke的第一参数是null则说明该方法为静态
System.out.println(methodCharAt.invoke(str1,new Object[]{2}));
               
TestArguments.main(new String[]{"111","333"});
        }


}


class TestArguments{
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(args);
                }
        }
}
在调用主函数时为什么输出结果是哈希值
打印结果[Ljava.lang.String;@e53108  

作者: 唐长智    时间: 2013-3-1 10:44
你打印的是args?args是个数组,所以是哈希值吧
作者: 刘圣繁    时间: 2013-3-1 10:52
.
.
.
.
.
TestArguments.main(new String[]{"111","333"});
        }



}


class TestArguments{
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(args);//注意老兄 你这儿写的不是arg  而是数组args  打印数组  当然是哈希值了
                }

作者: 黑马斯巴达    时间: 2013-3-1 11:20
刘圣繁 发表于 2013-3-1 10:52
.
.
.

呀呀,。。又粗心了啦。。哎。、谢谢喽!!{:3_49:}
作者: 黑马斯巴达    时间: 2013-3-1 11:21
唐长智 发表于 2013-3-1 10:44
你打印的是args?args是个数组,所以是哈希值吧

不好意思马虎喽。。。
作者: 顾传文    时间: 2013-3-1 12:57
问题原因:你打印的args 是数组,是一个对象,所以是哈希值。
解决一:
public static void main(String[] args){
                for(String arg:args){
                        System.out.println(arg);
                }
        }
解决二:使用Arrays这个类。Arrays这个类是专门用来操作数组的。提供了Arrays.toString方法将数组转成字符串。

public static void main(String[] args){
      System.out.println(Arrays.toString(args));        
}





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