java传值和传引用问题

阿邹 等级 420 0 0

这个问题还是很常见的,如果你平常敲代码比较多你可能经常会遇到这个问题。如果你知道java这个机制,你可能还会一直在找代码的问题。java中的值传递和引用传递。

比如下面有这俩个方法

    private void updataValue(String s){
        s = "123";
    }

    private void updataValue(JSONObject object){
        object.put("a",12);
    }

如果我传递一个字符串进行,假设我原来的字符串是321,然后我调用了updataValue方法后输出的会是123,而原来的字符串输出的是321,这就是传值,传值就是拷贝,我们的基本类型和string都是这样。这种情景很符合初学者常规思路。但是如果现在我们定义一个json对象,假设原来对象json中a为21,然后我们调用updataValue方法后原来的对象就会改变,这是为什么?这是我们传进去的是一个引用,内存中不会开辟除新的内存块进行保存,所以会直接引用一个内存块,一对多的关系,所以不管我们在哪里改,都会相应改变原来的对象。

总结:基本类型和string传值是拷贝,其他对象则是引用相同的内存地址。

收藏
评论区

相关推荐

下载二维码至钉盘
后端生成二维码的普通文件流,前端接收后在img标签中渲染 将二维码下载至钉盘通过接口获取后端返回mediaId字段,采用“dingtalkjsapi”插件中的方法下载 注意:dingTalkFun中,除了corId和mediaId必传外,文件名name也是必须要传的!!! <template <div class"onlineSign"
iOS 图片和文字一起上传
最近在忙着开发公司的一个项目,中间遇到很多坑,对于图片的上传在这里我也不做太多的介绍,网上各种大神的资料都有的,今天我主要说一下我再上传图片和文字的时候遇到的一些坑(图文上传我们很多时候都会遇到,遇到多了网上找的各种博客,解决了图文一起上传的问题)废话不多说,直接上代码: / 上传图文 / (void)upLoadImageViewToS
vue中页面间跳转传值的两种方式(query,params)
两者都可以传递参数,区别是什么? query 传参配置的是path,而params传参配置的是name,在params中配置path无效 query在路由配置不需要设置参数,而params必须设置 query传递的参数会显示在地址栏中 params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ; query: this.$route
js之传值与传址/undefined和null/严格模式
传值与传址 基本数据类型有五种Undefined、Null、Boolean、Number和String 引用数据类型有两种object,array,fn 两种数据类型的区别: 1. 存储位置不同 原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中; 引用数据类型直接存
React 组件通信之发布订阅模式
React 通信 react的数据流是单向的, react 通信有以下几种方式: 父向子通信: 传入props 子向父通信:父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值 父向孙通信:利用context传值。React.createContext() 兄弟间通信: ​ 1、找一个相同的父组件,既可以用pr
uniapp上传图片显示进度
uniapp上传图片,官方文档写的比较清楚,此处笔记是因为客户特殊要求,上传提示进度条,查到方法特此笔记。 uploadImg(){ var _self this; uni.chooseImage({ count: 1, sizeType:'copressed', success:(res) { console.log(r
java传值和传引用问题
这个问题还是很常见的,如果你平常敲代码比较多你可能经常会遇到这个问题。如果你知道java这个机制,你可能还会一直在找代码的问题。java中的值传递和引用传递。比如下面有这俩个方法java private void updataValue(String s){ s "123"; } private void upd
IoT基础架构的演进 — 边云自定义消息传输
边缘计算不仅仅是将应用部署在边缘,并对其进行自动化的监控和运维。在许多应用场景里,边缘和云上应用需要进行特定的消息传输、数据交换等,以完成边云协同的业务处理。例如,用户需要从云端发送命令至边缘的应用来触发特定的业务,或者边缘设备需要将采集的业务信息上传至云端处理。KubeEdge v1.6 版本增加了自定义边云消息传输的支持,用户可以根据场景,借助 Rule
PHP Cookie与Session的使用与区别
Cookie与SessionCookie和session是目前使用的两种存储机制。cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端;Session是让数据在页面中持续有效的一个传递方法,session存储在服务器端。掌握了cookie与session这两个技术,在WEB网站页面间信息传递的安全性是
聊聊dubbo协议2
在中介绍了attachments在consumer和provider间的传递情况,有个疑问没有给出答案。为什么2.7.x版本的dubbo不支持provider端向consumer端回传隐式参数呢?今天的续集将揭晓答案。 抓包确定是provider没发还是consumer丢掉 以下测试基于dubbo 2.7.6版本在provider端加入下面的代码
微信小程序 - 页面间传值
小程序页面间传值大家晚上好,说晚上好是因为是在晚上写的,说这句话是因为这句话开篇不那么突然。那么小程序的页面间传值,在我使用这段时间里,我就非常的主观的把它们分为wx.navigateTo和非wx.navigateTo的,因为wx.navigateTo有一个事件参数event,我从当前页跳转到下一页,如果需要能返回,我都用的wx.naviga
.net web core 如何编码实现文件上传功能
关于我 前言在进行Web前后端分析开始时,我们经常会碰到文件上传的需求。上传用户头像,上传认证材料、审核材料等,这些都可以归类为文件上传功能。今天主要把自己在开发过程中的心得进行一个整理,供大家学习。 开启静态文件中间件默认情况下,静态文件(如 HTML、CSS、图像和 JavaScript)是 ASP.NET Core 应用直接提供给客户端的资产。开启静态
2020疫情大数据2.0版本上线【Node.js与Vue.js爱的火花】
前言2020年已经过半了,疫情也好转许多。但是我们不能放松警惕,要坚持到最后。奥利给!!!说到这里,你是否想开发一个项目实时了解疫情数据呢?但是又担心没有数据接口,那么今天给大家解决这个疑惑。 线上示例复制以下链接(网站数据量太多,首次加载请耐心等待):https://www.maomin.club/fy/ 线上图例下面是几张具有代表性的网站图片。1.2
vue项目中使用element-ui实现excel表格上传
恰逢项目中要实现excel表格上传,度娘甚久,得此一文,留之。原文:https://blog.csdn.net/qq36718999/article/details/95387542 需求 vuecli 搭建前端项目,并使用elementui实现本地excel表格上传。(1) 限制上传文件只能是 xls、xlsx格式;(2) 限制上传文件大小不能超过 2MB
阿里Java开发手册!非科班生金九银十求职经历
1 基础 为什么 Java 中只有值传递? int 范围?float 范围? hashCode 与 equals,什么关系? String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的? Java 序列化中如果有些字段不想进行序列化 怎么办? 构造器 Constructor 是