1.什么是对象?

“万物皆对象”,这是JAVA在设计之初的理念之一。所谓“对象”,按通俗的说法就是“某个类(class)的一个实例(instance)”。一般存储在堆中。

2.什么是引用?

JAVA中的引用和C语言中的指针一样 ,都是操纵对象的标识符,是基于特殊语法的间接表示。一般存储在速度更快地堆栈中。

3.代码分析

定义Person类:

class Person{Int  age
StringBuffer name
}

创建Person类对象:

Person lisi = new Person();

下面分析这句创建对象的语句,总共包含4个动作:

(1)右边的“ new Person()  ”,是以Person类为模板,创建一个Person类的对象(Person对象);
(2)末尾的()表示,当Person对象创建后,立即调用Person类的构造函数(自定义或系统默认)对该对象进行初始化  。
(3)左边的 “Person lisi”,创建了一个Person类引用变量,用来指向Person对象的对象引用。
(4)“=” 表示一个传递地址的过程,即将右边创建的对象“new Person()”的地址传给左边的引用变量“Person lisi”,从而使“引用”指向了“对象”。

下面将创建Person对象的语句拆分成更清晰的两部分:

Person lisi;//引用变量部分
lisi = new Person();  //Person对象部分

由于对象创建在堆内存中,没有名字无法直接访问和表示,所以就用引用变量间接访问和表示。

延伸讨论:

情况一:如果代码只是执行了第一部分,由于没有指向任何一个对象,那么引用变量 lisi 就会为 null ;
情况二:再创建一个引用变量wangwu:Person wangwu;wangwu = lisi ;第二句表示引用lisi中存有的Person()对象的地址复制给引用wangwu,使引用wangwu也指向了Person()对象。
情况三:在创建一个新的Person()变量wangwu = Person();表示引用wangwu,指向了新的变量。
综上:(1)一个对象引用可以指向0个或1个对象;(2)一个对象可以有N个引用指向它。
情况四:lisi = wangwu;此时lisi不再指向第一个Person对象,而是和wangwu一样指向了第二个创建的Person对象。那么此时第一个创建的Person对象就会被列为垃圾回收的处理对象。对象和引用的关系将持续到对象回收。
情况五:如果创建的对象没有引用变量也是合法的。System.out.println(“JavaRefrence”);    //字符串打印完成后对象即被列入回收行列

区分JAVA中的对象和引用相关推荐

  1. java中某对象的引用什么意思_在java中,引用对象变量和对象间有什么关系?()

    案例分析一:假定CPU的主频是500MHz.硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过. 如果CPU在DMA初始化设置和启 ...

  2. Java中的对象类型像引用还是指针,谁是谁非?

    Java中的对象类型像引用还是指针,谁是谁非? 作者:海枫 地址:http://blog.csdn.net/linyt 作为一名程序员,我们应该对新知识和新技术刨根问底,而不应泛泛而谈.我未曾接触到J ...

  3. 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?

    写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...

  4. java中String对象和String变量

    2019独角兽企业重金招聘Python工程师标准>>> java中String对象和String变量 (2011-12-27 20:40:27) 转载▼ 标签: it 最近在论坛上看 ...

  5. Java 中的四种引用

    垃圾收集器与内存分配策略参考目录: 1.判断Java 对象实例是否死亡 2. Java 中的四种引用 3.垃圾收集算法 4. Java9中的GC 调优 5.内存分配与回收策略 在进行垃圾回收之前,虚拟 ...

  6. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  7. java中String对象作为参数传递问题

    问题 java中将对象作为参数传递究竟是值传递还是引用传递? 1.基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的. 2.对象作为参数传递时,是把对象在内存中的地址拷贝 ...

  8. java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...

    多线程-Java中的对象监视器是什么意思? 为什么要使用这个词? 在阅读有关Java线程的文章时,我经常注意到这样的表达:"当前线程是该对象的监视器的所有者". 我的意思是:线程有 ...

  9. java中是值传递引用传递_Java是按值传递而不是按引用传递

    java中是值传递引用传递 One of the biggest confusion in Java programming language is whether java is Pass by V ...

最新文章

  1. IntelliLock托管代码保护和许可授权管理系统软件详细介绍及下载
  2. java vector arraylist linkedlist用法与区别
  3. linux 下用ecipse 作用oracle 的客户端
  4. linux shell 时间运算以及时间差计算方法
  5. ABAP web service运行时的细节调试
  6. android 那几种动画,Android 动画实现几种方案
  7. C++实现双栈结构(一个顺序表中使用两个栈)
  8. redhat python3.4安装步骤
  9. mysql触发器中访问mssql数据表_[数据库]一个利用触发器(trigger)实现数据库表的审计功能(audit)的例子--针对ms sql实现...
  10. 财商第2课笔记_复利
  11. springboot+SSM Demo框架搭建
  12. php实现积分加头像排行榜,PHPCMS首页GET调用标签会员积分与头像前十名
  13. html如何设置ie6兼容性视图,IE6浏览器兼容性视图设置在哪里
  14. 教你怎么添加自己QQ为QQ好友 最新方法
  15. 搜索进阶之迭代加深搜索
  16. 解答:Visio自画封闭图形如何填充?
  17. busybox ync.c:(.text.sync_main+0x78): undefined reference to `syncfs' 出错
  18. 保监会:大数据对保险业改革创新及保险监管影响研究
  19. 千方百计获取百度网盘下载链接
  20. 灵魂发问!线程池到底创建多少线程比较合理?

热门文章

  1. 123. Leetcode 72. 编辑距离 (动态规划- 字符串系列)
  2. Leetcode 103. 二叉树的锯齿形层序遍历 (每日一题 20210924)
  3. python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath
  4. tkinter 笔记:创建输入框并显示结果 (莫烦python笔记)
  5. numpy 笔记 view,copy和numpy的运行速度
  6. python爬虫应用实战-如何爬取表情进行斗图?丰富你的表情库
  7. MATLAB从入门到精通-缺失值和异常值的处理应用案例
  8. 产品的三层境界:工具-平台-生态
  9. 各个大厂的机器学习平台概述
  10. 构建高性能服务(三)Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue--转载