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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任雷彬 中级黑马   /  2012-11-7 18:39  /  2233 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在看毕老师视频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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

7 个回复

倒序浏览
Object 数据类型

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

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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());

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为使用到了多态,任意对象都可以当成Object传入

评分

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

查看全部评分

回复 使用道具 举报
毕老师的sop(Object obj)方法可以打印任何对象,因为参数是Objectl类型引用变量。  

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

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

所以编译运行都可以。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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());

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为Object是上帝类,所有的类都是它的子类,所以可以把任何实参传进去

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我倒是挺同意6楼的,不过咱能把obj类写成Object类么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马