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

通过代码理解通过引用操作对象的“共享”特性:

public class Main {public static void main(String[] args) {int[] a = { 1, 2, 3, 4, 5 };int[] b = a;b[0] = 100;System.out.println(a[0]);}
}

运行结果:

为什么改变b[0]的值,a[0]的值也跟着改变了,这就是引用操作对象的“共享”特性大家可以通过下图来理解:

看完数组类型我们再来通过一个冒泡排序来理解这一特性:

import java.util.Arrays;public class BublleSort {//注意没有返回值public static void swap(int[] array, int a, int b){int temp = array[a];array[a] = array[b];array[b] = temp;}//这是一个升序的冒泡排序,注意没有返回值public static void bublleSort(int[] array) {int k;int i = array.length - 1;boolean judge = true;while (judge) {judge = false;for (k = 0; k < i; k++) {if (array[k] > array[k + 1]) {swap(array, k, k + 1);judge = true;}}i--;}}public static void main(String[] args) {int[] a = {9,8,7,6,5,4,3,2,1};bublleSort(a);System.out.println(Arrays.toString(a));int[] b = {1,2,3,4,5,6,7,8,9};bublleSort(b);System.out.println(Arrays.toString(b));int[] c = {5,3,1,6,2,4,9,8,7};bublleSort(c);System.out.println(Arrays.toString(c));}
}

运行结果:

可以看到上面代码中不管是swap(int[] array, int a, int b) 方法,还是bubbleSort(int[] array)方法,都没有返回值,这里也是应用了Java引用操作的“共享”特性,需要排序的数列对象在主函数中被创建,调用方法时将指向数组对象的引用变量传给形参,这样就等于在排序方法内部创建了一个引用,指向了传入引用变量指向的对象,换一种说法就是说在两个方法中并没有创建一个和待排序数组对象一样的新对象,只是创建了一个新的引用指向原有对象,所以在方法中对数组的操作,都是直接对原对象中的数据操作,所以当排序方法运行结束的时候原数组对象中的数据就被排好了顺序,所以就不需要返回值了。

菜鸟总结的有问题望指正。

Java通过引用操作对象的“共享”特性相关推荐

  1. java 共享软件 保护_【Java并发.3】对象的共享

    本章将介绍如何共享和发布对象,从而使他们能够安全地由多个线程同时访问.这两章合在一起就形成了构建线程安全类以及通过java.util.concurrent 类库来构建开发并发应用程序的重要基础. 3. ...

  2. 通过链表深入理解Java的引用和对象

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

  3. 【Java基础】 ⾯向对象编程三⼤特性 --封装、继承、多态

    文章目录 封装 继承 多态 封装 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 通俗的说 ...

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

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

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

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

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

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

  7. java 类里面对象共享_对象的共享

    3 对象的共享 3.1 可见性 我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且希望确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化.因此就需要通过显式的同步或 ...

  8. java逸出_Java并发编程 - 对象的共享

    编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理.同步代码块和同步方法可以确保以原子的方式执行操作,同步还有另一个重要的方面:内存可见性. 可见性 为了确保多个线程之间对内存 ...

  9. java 类里面对象共享_Java并发编程 - 对象的共享

    编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理.同步代码块和同步方法可以确保以原子的方式执行操作,同步还有另一个重要的方面:内存可见性. 可见性 为了确保多个线程之间对内存 ...

最新文章

  1. 笔记 | 深入理解深度学习语义分割
  2. R语言使用DALEX包的model_performance函数对caret包生成的多个算法模型进行残差分布分析并使用箱图进行残差分布的可视化
  3. 开放下载!《阿里巴巴大数据及AI实战》深度解析典型场景大数据实践
  4. SQL Server 2005/2008 图形界面(SQL Server Management Studio Express)
  5. map获取数字与int比较
  6. 收下这 16 篇最新论文,周会基本不用愁
  7. MVC实现实现文件流打包成压缩包
  8. net框架通用对象操作
  9. win8选择哪个python版本_Win8的几个版本该怎么选
  10. 【html、CSS、javascript-11】jquery-事件使用方法总结
  11. html关闭小图标css,怎么在marquee标签里面设置一个关闭的图标_html/css_WEB-ITnose
  12. WorkList-Dicom字段定义
  13. java常用设计模式及其使用场景
  14. Linux-you need at least 8.6GB disk space to install Ubuntu,this computer has only 8GB
  15. ansys19.0安装破解教程(图文详解)
  16. java实现普通图片转黑白图片
  17. 11 款用于优化、分析源代码的Java工具
  18. 《评人工智能如何走向新阶段》后记(再续17)
  19. 计算机程序设计表单,表单模板和表单简介
  20. 《侠盗猎车手-罪恶都市》秘籍

热门文章

  1. C#学习(6)——LINQ学习
  2. Python_urllib
  3. 15. 3 Sum (C,Python)
  4. 最简单的目标跟踪(模版匹配)
  5. 7-71 爬动的蠕虫 (15 分)
  6. 数据结构-在O(1)时间删除链表节点
  7. Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作...
  8. [BZOJ]5018: [Snoi2017]英雄联盟 DP
  9. Java数组扩容算法及Java对它的应用
  10. 【UNIX环境高级编程】线程同步