Java-关于Java是值传递还是引用传递的解读(附代码实例解读)

大家都知道Java是面向对象编程,那么有没有考虑过在传递的过程中,究竟传递的是值,还是值的引用呢?下面我们先来看一下什么事值传递和引用传递。
值传递:指在调用函数时将实际参数复制一份传递到函数中,这样如果函数中对值进行修改,并不会影响到实际参数
引用传递:指在调用函数时,将实际参数的地址直接传递到函数中,那么在函数中对参数进行修改将会影响到实际参数

解释:值传递类似于,你有一把钥匙,你朋友想去你家,你把钥匙复制了一把给他,然后他去你家。
引用传递类似于,你有一把钥匙,你朋友想去你家,你把自己的钥匙给了他,然后他去你家。

但是不管哪种情况,你朋友把你家电视砸了,把门拆了,你还是会有影响的。
所以,值传递并不会影响原来的实际参数。但是引用传递因为传递的是实际地址,对地址所指向的对象修改时会影响实际对象的。

引用传递:public static void main(String[] args){User user = new User();user.setName("ming");user.setAge(20);System.out.println(user);   // User{name="ming",age=20}pass(user);System.out.println(user);  // User{name="hong",age=20}
}public void pass(User user){user.setName("hong");System.out.println(user); 
}
值传递:public static void main(String[] args){User user = new User();user.setName("ming");user.setAge(20);System.out.println(user);   // User{name="ming",age=20}pass(user);System.out.println(user);  // User{name="ming",age=20}
}public void pass(User user){hong = new User();  // 此时 hong指向一个新的User对象地址,所以并不会影响原实际对象hong.setName("hong");System.out.println(user); 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装buildkit,并使用buildkit构建containerd镜像

背景 因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://github.com/moby/buildkit 简介 服务端为buildkitd,负责和runc或containerd后端连接干活,目前…

windows复制文件到U盘,ubuntu打开U盘中文显示?

背景 有一些文件想copy到ubuntu机器上,然后从windows系统copy到了u盘,ubuntu插上u盘之后,文件夹和文件内容里中文部分都是? 尝试解决 首先系统默认语言是英语,所以首先查了资料,将系统语言改成中文&…

Android 13 SPRD 如何临时修改 Android 系统版本

在 Android 开发或调试过程中,有时需要临时修改系统版本号,例如为了适应特定的应用需求或进行特定版本的兼容性测试。通过修改 Android 系统的构建文件,可以轻松实现这个目的。本文将介绍如何在 Android 源码中快速更改系统版本号。 步骤一:修改 sysprop.mk 首先,我们需…

魔音音乐 5.0.1 | 界面优美,可无损下载,可播放

魔音Morin 是一款免费下载付费音乐和免费播放音乐的软件。现在听歌都需要付费,不想付费听音乐就来魔音Morin,完全免费的音乐资源非常丰富,可同步四大音乐平台歌单,还有各类音乐榜单,自带音乐社、同步歌单以及搜索音乐功…

iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景

iTOP-3568开发板采用瑞芯微RK3568处理器,内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz,RK809动态调频。集成了双核心架构GPU,ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…

国内大语言模型哪家更好用?

大家好,我是袁庭新。 过去一年,AI大语言模型在爆发式增长,呈现百家争鸣之态。国内外相关厂商积极布局,并相继推出自家研发的智能化产品。 我在工作中已习惯借助AI来辅助完成些编码、创作、文生图等任务,甚至对它们产…

基于Springboot在线视频网站的设计与实现

基于Springboot视频网站的设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取:https://do…

Android 开发 TabLayout 自定义指示器长度

前言 原生 TabLayout 的指示器长度是充满整个屏幕的,但在实际开发中 UI 会设计成 指示器的长度等于或者小于标题字体长度,如图 如果设置成跟字体长度一样即使用 API: mTabLayout.setTabIndicatorFullWidth(false);或者在 xml 布局文件中的TabLayout标签…

普通java web项目转为maven项目

以前写的老项目,转为maven项目管理,关键是涉及的jar比较多,手动改工作量太大。 项目环境:eclipse、jdk8、jetty嵌入式启动。 1.创建一个新的maven项目。 2.拷贝源码。 将老项目src目录下的源码拷贝到新项目的src/main/java目录…

压缩SQL Server 2014 数据库日志文件

一开始没有设置好,数据库的日志文件膨胀到了3个G 以下使用Sql语句压缩日志文件的方法 注意用自己的数据库名称替换测试数据库名称:Dealer GOALTER DATABASE Dealer SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE Dealer SET RECOVERY SIMPLE -…

vscode配色主题推荐:Andromeda !

vscode配色主题推荐:Andromeda ! 图标库 vscode-icons ! Andromeda:Dark theme with a taste of the universe; 仙女座:一套宇宙深空体验的哑暗色主题; 高对比度,色彩饱和; Easy Installation Open the extensions sidebar on Visual Studio CodeSearc…

【设计模式-简单工厂】

定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于通过一个工厂类来创建某个产品类的实例,而不直接在客户端(调用方)中实例化对象。 这种模式的主要思想是将对象的创建逻辑集中在一个…

判断自己的mac是macOS x64 还是macOS ARM64

在终端输入 uname -a 这样的是x64 这样的是ARM64

基于深度学习的声纹识别

基于深度学习的声纹识别(Speaker Recognition)是一种通过分析和识别人的声音特征来确认身份的技术。声纹识别技术广泛应用于安全验证、智能助手、银行身份识别等场景。近年来,随着深度学习技术的发展,声纹识别的准确性和鲁棒性得到…

Skydel 24.9版本震撼发布,升级五大关键功能

在信号传播与仿真领域,Skydel软件一直是行业内的佼佼者。我们与您分享升级快讯,Skydel软件24.9.0版本已正式发布,此次更新不仅带来了五大全新功能,还在性能优化、用户体验以及远程API方面进行了全面升级,为用户带来更高…

Spring Cloud微服务技术选型指南

Spring Cloud微服务技术选型指南 随着软件架构从单体应用向微服务转变,Spring Cloud作为一种强大的微服务架构开发工具被广泛采用。它提供了一系列组件和工具来简化微服务架构的开发、部署和管理。本博客将探讨Spring Cloud微服务技术选型的各个方面,帮…

面试题:如何能够保证T2在T1执行完后执行,T3在T2执行完后执行?——CountDownLatch原理

CountDownLatch的使用方式 CountDownLatch用于某个线程等待其他线程执行完任务再执行,与thread.join()功能类似。常见的应用场景是开启多个线程同时执行某个任务,等到所有任务执行完再执行特定操作,如汇总统计结果。 面试题:如何…

最新Java零基础知识(持续更新中......)

1. 学习前的准备 一个好的学习方法(如何更高效学习): 成为一名合格的程序员,需要具备两个关键能力: 指法速度:高效的代码输入速度。编程思想:能够用编程的方式解决现实问题的能力。 指法速度&am…

SpringBoot中的Component和ComponentScan注解工作原理

Spring IoC 容器的工作是通过管理对象的生命周期和配置来保持业务逻辑清晰,但是 Spring 容器并不会自动知道要管理哪些 bean。所以我们来告诉 Spring 应该处理哪些 bean 以及如何处理,很简单这就是 Spring 的 Component 和 ComponentScan 注释的作用所在…

算法题总结(二十)——并查集

并查集理论基础 并查集常用来解决集合连通性问题,两个节点在不在一个集合,也可以将两个节点添加到一个集合中。 大白话就是当我们需要判断两个元素是否在同一个集合里的时候,我们就要想到用并查集。 并查集主要有两个功能: 将…