黑马程序员技术交流社区

标题: <以解决>关于Array的问题 [打印本页]

作者: 于启会    时间: 2012-8-6 00:51
标题: <以解决>关于Array的问题
本帖最后由 于启会 于 2012-8-6 01:37 编辑
  1. import java.util.ArrayList;


  2. public class test {
  3.         public static void main(String arg[]){
  4.                 ArrayList<String> arr1 = new ArrayList<String>();
  5.                 arr1.add("aaa");
  6.                 arr1.add("aaaa");
  7.                 ArrayList<Integer> arr2=new ArrayList<Integer>();
  8.                 arr2.add(3);
  9.                 System.out.println(arr1.getClass()==arr2.getClass());
  10.         }
  11. }
复制代码
两个ArrayList的类型不一样,
为什么运行结果返回为true?
作者: 李知伦    时间: 2012-8-6 01:01
getClass()
public final Class<?> getClass()
返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:

Number n = 0;
Class<? extends Number> c = n.getClass();

你在代码后面加一句,帮助理解,返回运行时的类,而不是数据类型
System.out.println(arr1.getClass());
输出:
class java.util.ArrayList



作者: 余明辉    时间: 2012-8-6 01:11
这样和你说吧,你定义的2个集合都是ArrayList吧,当你new这2个集合的时候,我们调用的是哪里的构造方法呢?调用的是Java\jdk1.6.0_10\jre\lib\rt.jar中的ArrayList的Class中的构造方法吧,而arr1.getClass() 和arr2.getClass()  他们返回的都是ArrayList的Class,所以他们肯定是同一个Class啊,结果肯定是相等的,打印一个true
getClass是拿到这个对象的字节码文件,因为这2个对象都属于同一个字节码文件,所以肯定为true
希望可以帮助你理解
作者: 于启会    时间: 2012-8-6 01:14
标题: RE: <以解决>关于Array的问题
李知伦 发表于 2012-8-6 01:01
getClass()
public final Class getClass()
返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 s ...

恩  懂了   System.out.println(arr1.getClass()); 和System.out.priint(arr2.getClass())  都是class java.util.ArrayList   类  所以返回为true
作者: 于启会    时间: 2012-8-6 01:35
问题已经解决
作者: 樊占江    时间: 2012-8-6 01:37
你获取到的两个对象都是人。额比对的正是人这个总类型。而对象的特性。是男人是女人我们不知道




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