Java 值传递、引用传递

    

开始之前,我们先来搞懂下面这两个概念:

  • 形参&实参
  • 值传递&引用传递

方法的定义可能会用到 参数(有参的方法),参数在程序语言中分为:

  • 实参(实际参数,Arguments):用于传递给函数/方法的参数,必须有确定的值。
  • 形参(形式参数,Parameters):用于定义函数/方法,接收实参,不需要有确定的值。
String hello = "Hello!";
// hello 为实参
sayHello(hello);
// str 为形参
void sayHello(String str) {System.out.println(str);
}

 

值传递、引用传递

        程序设计语言将实参传递给方法(或函数)的方式分为两种:

  • 值传递:方法接收的是实参值的拷贝,会创建副本。
  • 引用传递:方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。

        很多程序设计语言(比如 C++、 Pascal )提供了两种参数传递的方式,不过,在 Java 中只有值传递。

         在Java中,参数传递是通过值传递(pass-by-value)进行的。这意味着当你将一个变量作为参数传递给一个方法时,实际上传递的是该变量的值的副本,而不是变量本身。

        对于基本数据类型(如int、float、boolean等),它们被存储在栈内存中,当你将一个基本数据类型作为参数传递给一个方法时,传递的是该值的副本,方法中的修改不会影响原始的变量。

示例:

public class Main {public static void main(String[] args) {int x = 10;modifyValue(x);System.out.println(x);  // 输出: 10}public static void modifyValue(int value) {value = 20;}
}

        对于引用类型(如数组、对象等),变量存储的是对象在堆内存中的引用地址。当你将一个引用类型作为参数传递给一个方法时,传递的是引用的副本,但这两个引用仍指向同一个对象,因此方法中的修改会影响到原始的对象。

示例:

public class Main {public static void main(String[] args) {int[] arr = {1, 2, 3};modifyArray(arr);System.out.println(Arrays.toString(arr));  // 输出: [4, 5, 6]Person person = new Person("Alice");modifyPerson(person);System.out.println(person.getName());  // 输出: Bob}public static void modifyArray(int[] array) {array[0] = 4;array[1] = 5;array[2] = 6;}public static void modifyPerson(Person p) {p.setName("Bob");}
}class Person {private String name;public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

        在上述示例中,方法modifyArraymodifyPerson分别修改了传递进来的数组和对象的属性,这些修改会反映在原始的变量上。

        因此,尽管Java中的参数传递是通过值传递进行的,但对于引用类型,实际上是通过传递引用的副本来操作同一个对象。这常常被称为"引用传递",但严格来说它仍然是值传递的一种形式。

更多消息资讯,请访问昂焱数据。

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

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

相关文章

js中常用的字符串操作!!!

1.字符串的长度 // 字符串常用的操作 let str1 "qwasaertrayuasdf"; let str2 "asdfzcxfv"; // 1.字符串的长度 console.log(str1.length);2. charAt() : 返回指定索引位置的字符 // 字符串常用的操作 let str1 "qwasaertrayuasdf"; let str2…

jemeter,断言:响应断言、Json断言

一、响应断言 接口A请求正常返回值如下: {"status": 10013, "message": "user sign timeout"} 在该接口下创建【响应断言】元件,配置如下: 若断言成功,则查看结果树的接口显示绿色,若…

python自动化测试实战 —— 自动化测试框架的实例

软件测试专栏 感兴趣可看:软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识: 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

python+pytest接口自动化(10)-session会话保持

在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢? 上一篇文章我们介绍了Cookie绕过登录,其实这就是保持登录状态的方法之一。 另外一种方式则是通过session进行会…

【python】魔术方法大全——基础篇

什么是魔术方法 所谓魔法方法,它的官方的名字实际上叫special method,是Python的一种高级语法,允许你在类中自定义函数,并绑定到类的特殊方法中。比如在类A中自定义__str__()函数,则在调用str(A())时,会自动…

MySQL笔记-第12章_MySQL数据类型精讲

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第12章_MySQL数据类型精讲1. MySQL中的数据类型2. 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4…

RabbitMQ Streams 详解

RabbitMQ Streams是一种持久复制数据结构,可以完成与队列相同的任务:它们缓冲来自生产者的消息,这些消息由消费者读取。然而,流与队列的区别在于两个重要方面:消息的存储和消费方式。 Streams为仅追加的消息日志建模&a…

希亦|鲸立|小吉内衣洗衣机好用吗?强势PK“洗护一体”王者!

随着人们的生活水平的提升,越来越多小伙伴来开始追求更高的生活水平,一些智能化的小家电就被发明出来,而且内衣洗衣机是其中一个。我们对内衣裤的清洗频次会高于普通衣服,大多数人会选择手洗内衣裤,都在手洗过程不仅会…

会计学上机实验

使用说明: 蓝色标记提示需要明细核算最后算出来的净利润为 732150本文不是标准答案,老师也没给标准答案 1. 10 月 1 日,盛达有限责任公司成立,注册资本(实收资本)800 万人民币,其中&#xff1a…

Live800:企业做好客服质检的5大方法

在现代商业社会中,客服质量已经成为了企业竞争力的重要组成部分。一家企业的客服质量直接关系到其品牌形象和客户满意度,因此企业必须要重视客服质量,并且采取一些有效的方法来做好客服质检。下面将介绍企业做好客服质检的5大方法。 一、建立…

HI3559AV100和FPGA 7K690T的PCIE接口调试记录

1、基本情况 HI3559AV100和690t之间使用pcie2.0 x2接口连接,3559作为RC端,690T作为EP端,驱动使用XDMA。系统主要功能是FPGA采集srio接口过来的图像数据,再通过pcie把数据传递给3559,3559再实现图像数据的存储、AI处理、…

HarmonyOS鸿蒙应用开发——数据持久化Preferences

文章目录 数据持久化简述基本使用与封装测试用例参考 数据持久化简述 数据持久化就是将内存数据通过文件或者数据库的方式保存到设备中。HarmonyOS提供两两种持久化方案: Preferences:主要用于保存一些配置信息,是通过文本的形式存储的&…

X86汇编语言:从实模式到保护模式--命令篇

X86汇编语言:从实模式到保护模式–命令篇 补充汇编命令 注:不能直接将内存赋值给内存,也不能将立即数直接赋值给段寄存器(CS DS ES SS),但是可以将内存直接赋值给段寄存器 div:使用操作数作为…

面试必备的Linux常用命令

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 Linux常用命令 1、文件及内容2、网络3、进程服务4、…

PostgreSql 设置自增字段

一、概述 序列类型是 PostgreSQL 特有的创建一个自增列的方法。包含 smallserial、serial和 bigserial 类型,它们不是真正的类型,只是为了创建唯一标识符列而存在的方便符号。其本质也是调用的序列,序列详情可参考:《PostgreSql 序…

【FPGA】综合设计练习题目

前言 这是作者这学期上的数电实验期末大作业的题目,综合性还是十分强的,根据组号作者是需要做“4、篮球比赛计分器”,相关代码会在之后一篇发出来,这篇文章用于记录练习题目,说不定以后有兴趣或者有时间了回来做做。 …

慢SQL的治理经验

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、慢SQL导致的后果 二、可能导致慢SQL的原因 三、如何发现慢SQL 3.1 JVM Sandbox 四、识别高危SQL 4.1 阿里的重点强制SQL规…

python 拆分视频为图像序列

import cv2 import os#此删除文件夹内容的函数来源于网上 def del_file(filepath):"""删除某一目录下的所有文件或文件夹:param filepath: 路径:return:"""del_list os.listdir(filepath)for f in del_list:file_path os.path.join(filepath, …

微信小程序ios中非cover组件点击重复触发地图tap事件

现象&#xff1a; map中使用view组件的click事件会重复触发地图的tap组件&#xff0c;只在ios上出现 <map id"maps" style"width: 100vw;height: 100vh;" :latitude"latitude" :longitude"longitude":markers"markers"…

element-ui以服务方式调用loading,自定义修改icon

一、以服务的方式调用Loading 除了常用的v-loading、this.$loading我们还可以以服务的方式调用。主要有以下步骤 引入Loading服务 import { Loading } from element-ui;在需要时调用 Loading.service(options);其中 options 参数为 Loading 的配置项&#xff0c;具体见下表…