在接触java之前就知道了java的对象引用,但概念一直很模糊,看了《Head First in Java》后觉得书中的例子很有趣,便分享给大家。

首先要搞清对象引用是什么?

我们都知道变量可以存放数据,就像杯子一样,不同大小的杯子存放不同种类的饮料:

但是对象却是一类特殊的数据类型,在实例化一个对象时,是将对象分配到“堆”的存储空间的:

而对象引用的作用就像“遥控器”一样去间接地指挥对象工作:

对象与引用的“前世今生”

明白了上述概念后,就能简单通过下例搞明白,在对象创建过程中引用究竟和对象是怎样联系在一起的。
有如下实例:

1、声明一个引用变量

Dog myDog = new Dog();

jvm(java虚拟机)分配空间给Dog类型的引用变量myDog,换言之,它是一个只能控制Dog的遥控器

2、创建对象

Dog myDog = new Dog();
jvm分配堆空间给对象

3、连接对象在和引用

Dog myDog = new Dog();
即设置遥控器控制的对象

对象与引用的“恩恩怨怨”

引用在相互赋值,过程中,其实是对对象“控制权”的转让,没有人要的对象,就会被jvm检测到并清除。
有如下例:

1.

Book b = new Book();
Book c = new Book();

首先有这样两组对象与引用一一对应:

2.

Book d = c;

新建一个Book引用变量d,并将c赋值给d,其结果为:c和d引用同一对象:

3.

c = b;

将b的值赋值给c,其结果为:b和c引用同一对象

4.

d = null;

将null赋值给d,表示它不引用任何事物;
而对象2由于没有人可以引用它,只能被当作垃圾回收:

总结

这次看书基本明白了java引用和对象的关系,但我还想知道java为什么要这样设计。很遗憾,书中并没有具体说明,我只能通过我微不足道的经验谈谈自己的理解。
为了节省资源
java基本值传递,即拷贝传递,而拷贝引用显然比拷贝对象更省资源。
就像你拜托朋友照看房子,肯定是把钥匙的备份交给朋友,而非把房子的备份交给朋友。

java 初识对象和对象引用的关系相关推荐

  1. Java中对象和类的关系

    1.类可以用来创建对象 2.类是一种模板 3.对象是类的一个实例 4.就如同:int i :这里的 int 就相当于一个类,而变量 i 就相当于一个实例(是类 int 创建的一个实例)只是一个简单的类 ...

  2. java对象与对象引用变量

    Java对象及其引用 先搞清楚什么是堆,什么是栈.  Java开辟了两类存储区域,对比二者的特点 存储区域 存储内容 优点 缺点 回收 栈 基本类型的变量和对象的引用变量 存取速度比堆要快,仅次于寄存 ...

  3. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系

    Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...

  4. Java栈内存、堆内存、方法区对对象和引用的关系

    问题:Java栈内存.堆内存.方法区对对象和引用的关系 答案: 1.单个对象 如图所示: (1)首先类加载器加载要运行的类,首先将main方法加载进方法区,并进栈内存,顺序执行代码,创建对象,将对象的 ...

  5. Java的对象关系映射

    KeyAccess的 1.4版现已发布. KeyAccess是Java的对象关系映射(ORM)工具,旨在减少在域对象模型和基础数据库之间进行手动更新的需要. 它使用现有数据库作为生成域模型的起点,并且 ...

  6. 练习-Java类和对象之对象引用之模拟手机功能

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 任务: 实现手机的基本功能. 手机具有属性:品牌(brand).型号(type).价格(price).操作系统(os)和内存( ...

  7. 浅析Java中对象的创建与对象的数据类型转换

    这篇文章主要介绍了Java中对象的创建与对象的数据类型转换,是Java入门学习中的基础知识,需要的朋友可以参考下 Java:对象创建和初始化过程 1.Java中的数据类型     Java中有3个数据 ...

  8. java 实例对象拷贝,实例详解java对象拷贝

    这篇文章主要介绍了java对象拷贝详解及实例的相关资料,需要的朋友可以参考下 java对象拷贝详解及实例 Java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的:@T ...

  9. Java中对象和引用的理解

    2019独角兽企业重金招聘Python工程师标准>>> 偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两 ...

最新文章

  1. linux joe复制一行,Linux joe命令
  2. 【BZOJ 2432】 [Noi2011]兔农 矩乘+数论
  3. 37. Sudoku Solver
  4. RTP之H264封包和解包
  5. 数据之路 - Python爬虫 - 数据存储
  6. C语言大神进来看看这个题目
  7. 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
  8. linux 工业 网络协议,简单了解Linux TCP/IP协议栈
  9. C语言:某班有N名同学,每个学生的信息包括学号、姓名、三门课的成绩,从键盘输入名学生的信息,打印出N名学生三门课的平均成绩,以及最高分学生的信息(包括学号,姓名,三门课的成绩,平均分)
  10. Java数值溢出问题以及简单的算法实例
  11. JSP-08-第三方控件的使用
  12. 2021年PMP考试模拟题1(含答案)
  13. 幼儿园调查过程怎么写_(完整版)幼儿园调查报告
  14. 连接中国移动彩信网关发送彩信
  15. 惠普服务器查询ilo信息,HP服务器在线配置ilo地址
  16. 苹果ipad基本使用方法,苹果ipad的使用方法
  17. 【区块链扩容】侧链技术 Plasma(Layer 2)
  18. 日文發音中的PTK法則
  19. mysql 索引加锁分析
  20. 30分钟完成pandas入门

热门文章

  1. webstorm同时打开多个project方法
  2. IL,Emit之OpCodes说明(备查)
  3. 开始升级我的工作流系统
  4. 三个轻量级WebServer--lighttpd,thttpd,shttpd介绍
  5. 看看大网站到底是如何保障网络安全的
  6. 常用Maven收集以及Maven技巧
  7. Java动态加载一个类的几种方法以及invoke
  8. 优化系统后VS启动不了问题的一种解决方案
  9. 程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程
  10. 如何运行ImageMagick的命令行工具