以Integer类型传参值不变来理解Java值传参

2023-05-16

最近在写代码的时候出了一个错误,由于对值引用理解的不深,将Integer传入方法中修改,以为传入后直接修改Integer中的值就不用写返回值接收了,虽然很快发现了问题,但还是来总结一下

首先是代码:


public static void main(String[] args){
    Integer a1 = 5;
    updateInteger(a1);
    System.out.println(a1);
}
 
public static void updateInteger(Integer var){
    var = 10;
}  

打印输出的结果是5,应该是毫无疑问的,可当时为什么我会认为a1应该是10呢?

大概是平时经常obj.integer = number习惯了,所以觉得操作了一个引用就可以修改对象里的值

 

当我执行var = 10 的值以后,由于jdk1.5自动装箱的特性,实际情况是等价于执行 var = Integer.valueOf(10);

valueOf()方法 参看源码 会根据传入的数值 如果在-128-127之间 就从常量池中获取一个Integer对象返回

如果不在范围内 会new Integer(var)返回

那么执行 var = 10以后 

 

当时我天真的以为是操作了那个5变成了10

好了 ,这两张图已经足够说明Java传参为什么是值传参而不是引用传参了

总结一下:

值传参:将传入的值拷贝一份 ,比如传入int a = 5,并不会将变量a的地址传给方法

又或者传入对象类型Integer a1 =5 ,a1本身是个引用,传入方法后不会直接将a1这个引用传入,而是重新复制一份引用到方法参数中 ,有点绕 不理解? 想一下如果是将a1真实的传入上述的方法中,那就变成a1 = new Integer(10) ,结果就不一样了,变成下图所示,当然这是在JAVA中不可能的

引用传参:你可以理解为每次都把变量本身真实的传进去了,不管是个像int a这种引用地址的变量,还是像Integer a1这种引用对象的变量

 

public static void main(String[] 参数) {     
  AtomicInteger i=new AtomicInteger(40);
  i.intValue();
  System.out.println(i);
 }
    public static void change(AtomicInteger i) {
     i.set(55);
}

 

转载于:https://www.cnblogs.com/zhaoyan001/p/11613066.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以Integer类型传参值不变来理解Java值传参 的相关文章

随机推荐

  • linux动态库查找,Linux查找动态库的3种方法

    Linux查找动态库的3种方法 linux默认加载动态库的路径是 lib或者是 lib64 32位的系统是前者 xff0c 64位是后者 如果找不到还有3个地方 LD LIBRARY PATH rpath ldconfig 通过设置LD L
  • 云计算机中弹性,什么是弹性云计算?

    什么是弹性云计算呢 xff1f 有些人在刚刚听说这个名词的时候是发懵的 xff0c 弹性云计算是一种什么数字技术呢 xff1f 弹性云计算是云计算的一个必要构成 xff0c 这个数字技术与云计算是有一定的区别的 xff0c 弹性拓展资源用量
  • samba的启动与停止

    在Samba服务器配置完成后 xff0c 就可以启动Samba双线虚拟主机服务 在 etc init d目录中的脚本文件smb是控制Samba服务的 xff0c 通过参数start stop和restart可控制Samba服务的启动 停止和
  • java object 转换date类型_java string类型怎么转化成date类型

    string类型转化为date类型 xff1a 方法一 xff0c Date date 61 new Date 34 2018 9 30 34 方法二 xff0c String 61 new SimpleDateFormat 34 格式 3
  • 深度学习在graph上的使用

    原文地址 xff1a https zhuanlan zhihu com p 27216346 本文要介绍的这一篇paper是ICML2016上一篇关于 CNN 在图 xff08 graph xff09 上的应用 ICML 是机器学习方面的顶
  • 软件需求分析--结构化分析(SA)方法

    结构化开发方法 Structured Developing Method 是现有的软件开发方法中最成熟 xff0c 应用最广泛的方法 xff0c 主要特点是快速 自然和方便 结构化开发方法由结构化分析方法 SA法 结构化设计方法 SD 法
  • 高级计算机网络知识点

    题目类型 xff1a 判断20分 xff08 10题 xff09 单选20分 xff08 10题 xff09 简答30分 xff08 5题 xff09 问答 计算30分 xff08 3题 xff09 1 ARPANET的主要设计原则 1 1
  • Linux使用技巧:linux下将命令值赋给shell变量

    很多小伙伴在写shell脚本的时候需要把命令输出的值赋给一些变量 xff0c 使得脚本在运行过程中能够顺利使用这些变量 例如 xff1a 很多时候我们就需要获取当前目录的绝对路径 xff0c pwd这个命令大家在熟悉不过 xff0c 可是要
  • OpenDaylight虚拟租户网络(VTN)详解及开发环境搭建

    一 VTN简介及架构分析 xff1a 具体详见开发人员指南wiki xff1a https wiki opendaylight org view Release Lithium VTN developer Guide 这里有两篇很好的初学者
  • LCD1602和LCD12864

    1602 字符型 xff08 字符型的模组 xff09 只能显示数字与字符 不可以显示汉字 12864 点阵型 xff08 图形型的模组 xff09 可根据需求任意显示字符 数字 汉字 图形 1602 为16字乘2行 12864 为128列
  • 虚拟机去混杂模式与 vlan in vxlan 特性

    虚拟机 vlan trunk 特性 1 功能 1 xff09 允许不同vlan的network下的虚拟机之间通信 一般情况下 xff0c 虚拟机只能在相同vlan的网络下通信 2 xff09 允许虚拟机发送vlan报文 2 组网图 虚拟机出
  • 慧智物联剖析信息化与数字化的区别,文件管理不容忽视

    目前 xff0c 数字化 一词铺天盖地 xff0c 已经成为经济 科技等领域最热门的话题 社会各界乃至国家都非常重视 xff0c 大力推广 xff0c 可以说是国家战略 信息化 xff0c 经常和数字化一起被提及 xff0c 是两个容易混淆
  • Dev-C++ 5.11简单使用说明

    点此下载 xff0c 下载完后解压并双击 Dev Cpp 5 11 TDM GCC 4 9 2Setup exe xff0c 默认安装即可 使用过程如下 xff1a 0 打开Dev C 43 43 开发环境 1 新建源文件 xff0c 按C
  • Deep Belief Network简介

    1 多层神经网络存在的问题 常用的神经网络模型 一般只包含输入层 输出层和一个隐藏层 xff1a 理论上来说 隐藏层越多 模型的表达能力应该越强 但是 当隐藏层数多于一层时 如果我们使用随机值来初始化权重 使用梯度下降来优化参数就会出现许多
  • 神经网络浅讲:从神经元到深度学习

    神经网络是一门重要的机器学习技术 它是目前最为火热的研究方向 深度学习的基础 学习神经网络不仅可以让你掌握一门强大的机器学习方法 xff0c 同时也可以更好地帮助你理解深度学习技术 本文以一种简单的 xff0c 循序的方式讲解神经网络 适合
  • CentOS7使用firewalld打开关闭防火墙与端口

    1 firewalld的基本使用 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 xff1a systemctl status firewa
  • Vue生命周期

    Vue实例的生命周期 什么是生命周期 xff1a 从Vue实例创建 运行 到销毁期间 xff0c 总是伴随这各种各样的事件 xff0c 这些事件统称为生命周期 生命周期钩子 xff1a 就是生命周期事件的函数 主要的生命周期函数分类 xff
  • toapi模块简单使用

    toapi是一个api与爬虫结合的一个库 使用简单 可以自定义api展示 简单的mockserver 但只限制于get请求 toapi会在同级目录下建立缓存机制 再次访问就会读缓存了 安装 pip intall toapi pip inst
  • 高等数学同济第七版课后答案上册

    高等数学同济第七版课后答案上册 下载地址 xff1a 链接 xff1a https pan baidu com s 185C8RB4Y9pYO84V4Rup1Wg 提取码 xff1a p7o4 如果链接失效扫一扫右侧 xff0c 回复 高等
  • 以Integer类型传参值不变来理解Java值传参

    最近在写代码的时候出了一个错误 xff0c 由于对值引用理解的不深 将Integer传入方法中修改 xff0c 以为传入后直接修改Integer中的值就不用写返回值接收了 xff0c 虽然很快发现了问题 xff0c 但还是来总结一下 首先是