在正式介绍重点内容以前,先给像我这样的初学者强调一下 " = " 在引用和对象应用中的作用:

大致是 " = " 左边是引用," = " 右边是对象 (万变不离其宗,始终抓住这一点就好)。
含义是让 " = " 左边的引用指向" = " 右边的对象 。


链表作为一种线性表的数据结构,目的是将一组数据通过逻辑上相邻(线性),实际存储空间不相邻的方式组织起来,相比于顺序表,链表最大的好处是链表可以不必用一段完整的空间存储数据,这-相比于顺序表这大大提高了空间的利用率。C语言实现链表是通过指针(非静态链表)将一个个节点串联起来,Java中则是通过使用引用指向对象(节点就是一个个对象)的方式将节点们串联起来,然后让尾节点的 “next” 引用指向 “null” 。

这是一个节点类:

// 链表的结点类
public class Node {//这里用int类型;代表节点的数据域public int var;//声明一个节点(Node)类 的引用,让其指向下一个节点对象Node next;
}

为了方便理解把一个节点对象画成图看:

我们的目的是这样的:

public class Demo {public static void main(String[] args) {Node node1_1 = new Node();Node node1_2 = new Node();//....... 还可以定义很多节点......//定义一个头引用指向首节点Node head1 = node1_1;//将节点相连node1_1.var = 1;node1_1.next = node1_2;node1_2.var = 2;//尾节点的next指向 "null"node1_2.next = null;//第二条链Node node2_1 = new Node();Node node2_2 = new Node();// .........Node head2 = node2_1;node2_1.var = 4;node2_1.next = node1_2;node2_2.var = 5;//尾节点的next指向 "null"node2_2.next = null;}
}

这了两条节点用图表示就是这样:

相信看到这里应该对Java的链表有一定的认知了。
那么为了加深引用和对象的理解请耐心看完下面几个例子(在看答案之前先自己尝试画下,对初学者一定会有帮助)。

在上述两个链表的基础上,分别表示执行以下代码后的变化结果 :

//  1:
head1 = head2;

//  2:
head1 = head2.next;

// 3:
head1.next = head2;

// 4:
head1.next = head2.next

思考过后再看答案

1 :

意思是让head1 引用 指向 head2 引用指向的对象:


2 :

意思是让head1引用 指向 head2引用 指向 的对象中的 next引用 指向的对象 :


3 :

意思是让 head1这个引用 指向的对象中的 next引用 指向head2这个引用指向的对象 :


4 :

意思是让head1这个引用 指向的对象中的 next引用 指向== head2这个引用指向对象中的 ==next引用指向的对象

相信初学者在仔细看过之后,会对引用和对象有一个更深入的理解,如果各位看过发现我问题还请及时告诉我更正,谢谢。

通过链表深入理解Java的引用和对象相关推荐

  1. 深入理解Java类型信息(Class对象)与反射机制

    关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java并发之synchronize ...

  2. JVM 学习(2)—简单理解Java 四大引用(强、软、弱、虚)

    一.Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期,以便在不同场景下灵活地处理对象的回收问题.不同类型的引用在垃圾回收时的处理方式不同,可以用来实现不同的垃圾回收策略. ...

  3. Java通过引用操作对象的“共享”特性

    先来理解一下引用和对象的关系:对于任何引用类型直接创建的变量都是一个引用,这个引用指向这个类型的对象,数据是存在对象中的,对数据的操作实质是通过引用找到对应的对象,在对对象中的数据进行操作. 而题目中 ...

  4. java 父类引用子类对象_java多态,如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   C ...

  5. 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC

    对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配.当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. HotSpot虚拟机提供了-XX:+PrintGCDetai ...

  6. java 父类引用子类对象_java 父类引用指向子类对象

    1. 无论是泛型还是普通父类引用指向子类对象,父类引用可见范围都是父类自己的变量或函数 2. 说明见注释 代码如下:父类 package com.atguigu.spring.beans; publi ...

  7. 全面理解Java内存模型(JMM)及volatile关键字

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自[zejian ...

  8. 深入理解Java并发之synchronized实现原理

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72828483 出自[zejian ...

  9. java 别名现象_引用与对象赋值时的别名现象

    简明现代魔法 -> Java编程语言 -> 引用与对象赋值时的别名现象 引用与对象赋值时的别名现象 2009-09-08 要对一个对象进行操作,我们真正能操作的是该对象的引用. 所以,如果 ...

最新文章

  1. 仅用CPU就能跑到1000FPS,这是开源的C++跨平台人脸检测项目
  2. Springcloud Feign原理
  3. python中string的操作函数
  4. 直接运行PowerShell脚本
  5. java中string类_Java中String类浅谈
  6. 387. First Unique Character in a String
  7. js/d3.min.js_在5分钟内学习D3.js
  8. MFC开发IM-第十一篇、MFC设置对话框的背景颜色及设置透明
  9. Spring-AnnotatedBeanDefinitionReader
  10. Quartus17下载程序进FPGA
  11. 02 Python元组 字典 数据类型 if while for 迭代
  12. JS — 数组去重(4种方法)
  13. ICLR 审稿人:这篇论文在标签平滑和知识蒸馏的关系上取得了重大突破!
  14. java7下载64位下载_JRE7 64位(java运行环境)下载|JRE7 64位(java运行环境)官方下载-太平洋下载中心...
  15. 10分钟就能学会,Linux操作系统21个shell常用命令
  16. 小熊的十万个为什么?
  17. 软件安装(二)---PDF打印机安装设置
  18. outlook邮箱pc/mac客户端下载 含最新版
  19. lower_bound和upper_bound的区别
  20. 优信二手车告急!CTO辞职,员工降薪至1700元...

热门文章

  1. Javascript开发的HTML5游戏的知识产权保护
  2. 每个前端工程师都应该去了解的前端面试题总结(一)
  3. 用JS判断不同分辨率调用不同的CSS样式文件
  4. HTML5 —— 本地存储
  5. Java多线程(学习总结,持续更新)
  6. OpenCV3学习(12.2) 目标跟踪之运动模板法segmentMotion实现(Mat版本)
  7. 连接oracle配置文件参数,Hibernate3 +Oracle10g 集群,hibernate配置文件中如何编写连接参数...
  8. js 中meta 移除head_JS函数和winform函数之间的相互调用
  9. 图像处理-图像增强(二)
  10. java 模板接口开发_微信公众平台 发送模板消息(Java接口开发)