从宏观的角度来看,对象是类的实例。比如:

//定义一个名为Someone的类,代表这么一些人(通过指定年龄,性别,性格等基本信息)
class Someone {
  public int age;
  public string sex;
  public string name;
  //other...
}

//......
//创建一个Someone类的对象,代表昵称为nemo的一个特定的人
Someone nemo = new Someone();

这时,我们会象通常所说的那样讲到:我们创建了一个名为nemo的Someone类的对象(是的,这没有错,但它会和下文所讲的一些内容产生些许理 解上的困惑)。因为每当创建类的一个实例(昵称为nemo的某人),就创建该类的一个对象(名为nemo的Someone类的对象),而每个对象自身包含 类中定义的所有实例变量(age,sex,name等)的一个拷贝,所以说对象nemo是Someone类的实例。顺便,我们再创建一个名为andy的 Someone类的对象:

Someone andy = new Someone();

对象nemo和对象andy是相同的吗?他们仅仅是名字不同而已吗?不——因为每个对象的变量的值不同!比如:

nemo ——>|age       20      |        andy ——> |age         40        |
               |sex        “男”   |                      |sex    “男”   |
               |name  “尼 莫”|                        |name  “刘德华”|

所以nemo和andy是两个不同的对象,唯一相同的是它们都属于同一种类型——Someone类!

而从微观的角度来看,我们前面所说的“对象nemo”真的是对象吗?你可能会奇怪我怎么会这么问...
实际上,
Someone nemo = new Someone();
这一创建一个Someone类的对象的过程分为两步:

//声明一个引用变量
Someone nemo;

//创建一个Someone类的对象,new运算符使运行时为该对象动态的分配内存;
//然后返回该对象所在的内存地址,并赋于变量nemo,从而引用变量nemo指向该对象
nemo = new Someone();

此时,对于nemo的理解应该是:nemo是一个引用新创建的Someone类对象的变量(如同c语言的指针变量),它本身并不是一个对象!

    引用变量nemo             对象所在内存地址(设运行时为其分配起始地址为100号的连续内存单元)  
    |          ——|————>100|     20     | age
                                       |    “男”  | sex
                                       | “尼 莫” | name

现 在你理解了为什么说类是引用类型了吧?——类对象通过引用来访问呀!同时,也说明了为什么上文说“nemo和andy是两个不同的对象”——运行时为对象 动态分配内存,所以两个对象所在的内存地址不同,当然两个对象是不同的咯!——等等,你刚刚不是说nemo是引用变量吗?怎么又说“nemo... 是...对象”了呢?
笔者在初学时在理解上存在这样的困惑!
但是,你可能注意到了,Someone是一个类,而nemo自然就是声明为这个类的一个变量;而类作为一种类型,它是属于引用类型,所以nemo自然就是一个引用类型的变量即引用变量了啊。
关键的一点是,我们可以从不同的角度来看这一问题:宏观上,nemo是对象;而微观上,深层的理解,nemo是引用变量。

最新文章

  1. 【干货分享】流程DEMO-固定资产转移流程
  2. java package一些试验
  3. WordPress For SAE 移植
  4. js 所有事件列表
  5. d.BIO连接器与NIO连接器的对比之二
  6. 友盟分享SDK集成步骤
  7. sublime 插件zen coding
  8. POJ 3461 Oulipo KMP
  9. hihoCoder#1080 (线段树)
  10. Dede 列表页 缩略图 有显示无则不显示
  11. MySql命令——命令行客户机的分隔符
  12. window.location.href("url") 无法在chrome和Firefoxz中使用
  13. excel单元格中批量加入固定字符
  14. LeetCodeOJ. Maximum Depth of Binary Tree
  15. SQL Server 2008 允许远程链接,适用于广域网和局域网
  16. Kettle根据时间戳同步数据实现
  17. SQL SERVER Management Studio
  18. [Swift]LeetCode463. 岛屿的周长 | Island Perimeter
  19. 2.2String工具类
  20. MySQL中链接查询inner join与left join使用

热门文章

  1. oracle函数 VARIANCE([distinct|all]x)
  2. @loj - 2339@ 「WC2018」通道
  3. vue init定制团队模板之meta.js/meta.json写法入门
  4. day5_python之环境变量设置
  5. array_map 用法
  6. 【CSS3 + 原生JS】上升的方块动态背景
  7. Educational Codeforces Round 10 A B题、
  8. Hammersley-Clifford定理证明
  9. webpack优化 -- compression-webpack-plugin 开启gzip
  10. codeforce 382 div2 E —— 树状dp