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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cyh8807 中级黑马   /  2013-3-3 09:59  /  1739 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.lang.reflect.*;
  2. public class ReflectArrayDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 String[] str = new String[]{"ab","cd","deg"};
  7.                 printObject(str);
  8.                 printObject("abc");
  9.                
  10.         }
  11.         public static void printObject(Object obj)
  12.         {
  13.                 Class cls = obj.getClass();
  14.                 //if(cls == Array.class)             问题在这里
  15.                 if(cls.isArray())
  16.                 {
  17.                         int len = Array.getLength(obj);
  18.                         for(int x=0; x<len; x++)
  19.                         {
  20.                                 System.out.println(Array.get(obj,x));
  21.                         }
  22.                 }
  23.                 else
  24.                 {
  25.                         System.out.println(obj);
  26.                 }
  27.         }
  28. }
复制代码
请问在这个程序中 cls == Array.class 与cls.isArrya()这两行代码的不同之处具体该怎么理解?
它们所传递的不是同一个信息吗?都是判断cls 是不是一个Array的实例对象,但是运行的时候cls==Array.class输出的确不是数组的结果,而是数组的引用地址


2 个回复

倒序浏览
先理解下Type 你就明白为什么了,
Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
isArray()  判定此 Class 对象是否表示一个数组类对应的Type: 数组类型



回复 使用道具 举报
请问在这个程序中 cls == Array.class 与cls.isArrya()这两行代码的不同之处具体该怎么理解?
cls 判断是否为数组 如果cls ===Array.class 就永远是true了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马