背景

今天在公司做需求的时候,突然遇到了这个问题,八股文背过,但是又记不大清楚了。索性写下来,方便我这笨蛋脑子下次看。

解释

理解这个问题在于看它的角度(强调、加粗)

那我们开始,Java中一切都是值传递(中心句),基本变量传递的实际的值,比如 int a=3 会将 3 传递进去;引用变量传递的是地址,比如 User user=new User() 会将 user 所在的地址传递进去。


角度 来分析

所谓值传递,基本变量本身的 就是这里的值, 引用变量的 地址 就是这里的值。

String 及包装类型也是值传递,因为这些对象不可变(Immutability)具体可参考:https://stackoverflow.com/questions/1552301/immutability-of-strings-in-java


可见性 来分析

基本变量:

先需要了解,局部变量会放在栈中,成员变量会放在堆中,如下图所示:

一个方法对应一个栈帧,方法结束后栈帧便会弹出

在上图中,test 方法栈帧感知不到 change 方法的变化,所以当 change 方法栈帧弹出后,test 方法依旧会输出 3 。

引申一下:现在一个公司需求 A系统、B系统 要同时操作一个数据,并要求实时感知数据变化,那我们可以怎么做?最简单的办法,加一个中间件,例如redis。需要注意数据一致性。

引用变量:

如果是修改引用变量,那么便会修改堆中的数据,多个栈帧对应一个堆中对象,无论哪个方法修改了数据,其他方法再次访问都会感知变化。

分析Java值传递与引用传递的更多相关文章

  1. java中值传递和引用传递

    最近工作中使用到了值传递和引用传递,但是有点懵,现在看了下面的文章后清晰多了.一下是文章(网摘) 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...

  2. Does Java pass by reference or pass by value?(Java是值传递还是引用传递) - 总结

    这个话题一直是Java程序员的一个热议话题,争论不断,但是不论是你百度搜也好还是去看官方的文档中所标明的也好,得到的都只有一个结论:Java只有值传递. 在这里就不贴代码细致解释了,让我们来看看一些论 ...

  3. 理解java值传递与引用传递

    1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型.基本类型的变量保存原始值,即它代表的值就是数值本身:而引用类型的变 ...

  4. Java是值传递还是引用传递?

    Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题.这个问题一般是相对函数而言的,也就是Java中所说的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法的两 ...

  5. 一道笔试题来理顺Java中的值传递和引用传递

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

  6. Java中的值传递与引用传递

    1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型. 基本类型的变量保存原始值,即它代表的值就是数值本身: 而引用类型 ...

  7. 堆栈详解 + 彻底理解Java的值传递和引用传递

    本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...

  8. 【Java】 参数的传递:值传递与引用传递讨论

    内容稍多,可直接看第4点的讨论结果 前言 在涉及到传递参数给方法时,容易出现一些参数传递错误的问题,这就涉及到了参数的传递问题,必须搞清楚:参数是如何传递到方法中的?一般来说,参数的传递可以分为两种: ...

  9. 第002弹:Java 中的值传递和引用传递

    在 Java 的代码开发过程中,为了尽可能提高方法的复用性,明确方法的作用,同时防止一个方法内部过于臃肿的问题,往往会创建许多方法,那么不可避免地会涉及到参数传递的问题.通常来说,我们将 Java 中 ...

  10. 一个随意list引发的惨案(java到底是值传递还是引用 传递?)

    前两天写了一个递归,因为太年轻,把一个递归方法需要用到的list定义该递归方法外了,结果开始断点测试的时候有点小问题 ,然后上线之后因为数据量太多导致了一个java.util.ConcurrentMo ...

随机推荐

  1. axios使用备忘录

    安装使用 使用npm安装: $ npm install axios 使用CDN: <script src="https://unpkg.com/axios/dist/axios.min ...

  2. 合合信息旗下启信宝与鹏城实验室达成数据托管合作,“AI靶场”让数据管理更精准

    合合信息旗下启信宝与鹏城实验室达成数据托管合作,"AI靶场"让数据管理更精准   数字经济时代,数据已成为新型生产要素.通过"数据托管"等形式对数据进行集中管理 ...

  3. QT数据可视化框架编程实战之三维曲面图 实时变化的三维曲面图 补天云QT技术培训专家

    QT数据可视化框架编程实战之三维曲面图 实时变化的三维曲面图 补天云QT技术培训专家 简介 本文将介绍QT数据可视化框架编程实战之三维曲面图,本文通过构造一个数据实时变化的三维曲面图的应用实例来展示Q ...

  4. Java Web 拾遗

    许是年纪大了,老是回忆起以前的点点滴滴.翻看当初的代码,如同偶遇多年未见的前女友,曾经一起深入交流的情谊在颔首之间消散,令人烦躁. 今天就来聊聊老生常谈的 Java Web 开发.缘于一个简单的Spr ...

  5. Kubernetes基础(kube-apiserver?kube-controller-manager?kube-scheduler?kubelet?kube-proxy?kubectl?)(十一)

    一.kube-apiserver API Server 提供了资源对象的唯一操作入口,其它所有组件都必须通过它提供的 API 来操作资源数据.只有 API Server 会与 etcd 进行通信,其它 ...

  6. 【赵渝强老师】Docker的日志

    Docker的日志分两类,一类是 Docker引擎的日志:另一类是容器日志.下面我们分别进行介绍. 一.Docker引擎的日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14 ...

  7. js 中必须加分号的位置集合

    1. 匿名函数(自执行函数)(function (){}()) 2. 解析赋值    2 个变量交换位置

  8. .net 泛型 Generic

    什么是泛型 就是不确定的类型

  9. el-tree 懒加载复选框默认展开和默认选中

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  10. 《使用Gin框架构建分布式应用》阅读笔记:p108-p126

    <用Gin框架构建分布式应用>学习第8天,p108-p126总结,总计18页. 一.技术总结 1.Redis eviction policy (1)什么是 eviction policy? ...