黑马程序员技术交流社区

标题: 关于ArrayList集合中一些问题的疑惑?? [打印本页]

作者: 任雷彬    时间: 2012-11-7 18:39
标题: 关于ArrayList集合中一些问题的疑惑??
在看毕老师视频ArrayList视频中,
如下代码,创建的sop函数的参数类型是Object类,但是调用sop函数时实参却写的是  a1.size();
但是编译运行成功,这是为什么?我有些疑惑?
import java.util.*;

/*
add 方法的参数类型是Object.以便于接收任意类型的对象。
*/
class  CollectionDemo
{
        public static void main(String[] args)
        {
                //创建一个集合容器。使用Collection接口的子类,Arraylist。
                ArrayList a1 = new ArrayList();
               
                //1.添加元素
                a1.add("java01"); //add(Object obj)
                a1.add("java02");
                a1.add("java03");
                a1.add("java04");
               
                //2.获取个数。集合长度。
                sop("size"+a1.size()); //调用韩sop函数,参数列表参数类型是Object类为什么
                                         //是实参是a1.size();?
                //System.out.println("Hello World!");
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

作者: HeiMa-黄倲江    时间: 2012-11-7 19:04
Object 数据类型

保存引用对象的 32 位(4 字节)地址。可以为 Object 的变量分配任何引用类型(字符串、数组、类或接口)。Object 变量还可以引用任何值类型(数值、Boolean、Char、Date、结构或枚举)的数据。

备注  
Object 数据类型可以指向任意数据类型的数据,包括您的应用程序识别的任意对象实例。当您在编译时不知道变量可能指向哪种数据类型时,请使用 Object。


作者: 焦晨光    时间: 2012-11-7 19:15
public static void sop(Object obj)
        {
                System.out.println(obj);
        }

定义成object类型,表示可以接受任何类型的数据,
a1.size();返回值是int类型,当然可以被sop函数接收了,sop输出可以是表达式,只要表达式有一个固定的值,任意类型都ok!~
sop("size"+a1.size());等于System.out.println(size"+a1.size());


作者: 颜峰    时间: 2012-11-7 19:43
因为使用到了多态,任意对象都可以当成Object传入
作者: 陈军    时间: 2012-11-8 11:23
毕老师的sop(Object obj)方法可以打印任何对象,因为参数是Objectl类型引用变量。  

而al.size()方法返回的是int型值,该值会被自动装箱成Integer对象。

利用多态。就可以传递给Object 变量obj。

所以编译运行都可以。
作者: 会飞的鱼    时间: 2012-11-8 13:12
sop("size"+a1.size());

sop(Object obj)看起来接受的是obj对象,但你疑惑的是sop("size"+a1.size()); 这句怎么是个obj?
其实"size"+a1.size()做了两件事:
1、a1.size()求元素个数
2、"size"+a1.size()就是一个字符串了
等于就是说sop("size"+a1.size()); 传入的是一个String字符串,这哥们不也是一个Object吗??所以可以。
看以下:
//String a="a";
//System.out.println(a+1);
//System.out.println(a.getClass().getName());    这里是java.lang.String,说明他是一个字符串String,但它继承Ojbect类,如下一句是:java.lang.Object
//System.out.println(a.getClass().getSuperclass().getName());
作者: 黑马贾林栋    时间: 2012-11-8 13:17
因为Object是上帝类,所有的类都是它的子类,所以可以把任何实参传进去
作者: 杨志男    时间: 2012-11-8 15:24
我倒是挺同意6楼的,不过咱能把obj类写成Object类么




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