Java参数值传递

news/2025/1/12 2:36:19/

Java参数值传递

  • 参数是基本类型
  • 参数是引用类型

参数是基本类型

场景:通过方法,对传入的实参进行值修改
例如,Java冒泡排序

java">public class Test {public static void main(String[] args) {int[] arr = {1,8,5,6,4,9,3};for (int i = 0; i < arr.length - 1; i++) {// 每一轮比较,将最大的元素“浮”到数组末尾for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 交换相邻元素int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println(Arrays.toString(arr));}
}

运行正常,能否把交换过程抽取成方法?

java">public class Test {public static void main(String[] args) {int[] arr = {1,8,5,6,4,9,3};for (int i = 0; i < arr.length - 1; i++) {// 每一轮比较,将最大的元素“浮”到数组末尾for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 交换相邻元素,使用抽取方法swapValue(arr[j],arr[j+1] );}}}System.out.println(Arrays.toString(arr));}// 交换方法抽取public static void swapValue(int a, int b){int temp = a;a = b;b = temp;}
}

结果发现数组没有排序,原样输出,swapValue没有发生作用

原因:Java中的参数是值传递,尽管方法体对参数进行各种操作,使用方法时,传入了实参,也不影响实参变量的值,只是复制了实参的值供方法使用
java 出于安全考虑,放弃了C\C++的直接操作内存的能力(指针、取地址)

C++的指针变量与各种变量的取地址运算混杂,程序逻辑代码庞大之后,稍不注意就会出现野指针(指针悬空),内存泄漏等问题,维护麻烦
逻辑不负责情况子啊指针或者取地址还是好用的,例如
C++函数实现两变量值交换,形参变量 &取地址,也就是引用传递,直接操作内存地址的值
void swapValue(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}

参数是引用类型

对象作为参数,也是值传递

误区:引用类型就是引用传递

本质Java不允许获取地址值,直接输出对象变量,得到一个内存地址经过计算得来的哈希字符串

java">public class Test {public static void main(String[] args) {int[] arr = {1,8,5,6,4};changObject(arr);// 并没有被改变System.out.println(Arrays.toString(arr));System.out.println(arr);}public static void changObject(int[] arr){arr = new int[]{1,2,3,4,5}; // 无效的操作}
}

Java是完全面向对象的,如果需要改变对象,可以通过定义成员方法,由对象调用方法实现


http://www.ppmy.cn/news/1562385.html

相关文章

leetcode 127. 单词接龙

题目&#xff1a;127. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; 先建立一颗trie树&#xff0c;从beginWord开始bfs&#xff1b;bfs的过程中&#xff0c;对trie树进行dfs寻找“只差一个字母”的其他未遍历到的字符串&#xff1b;直到bfs遍历到endWord。 struct Node …

用Python爬虫探索义乌购店铺详情的奇妙之旅

在当今这个信息爆炸的时代&#xff0c;数据如同隐藏在暗处的宝藏&#xff0c;等待着有心人去挖掘。义乌购&#xff0c;作为全球小商品贸易的重要平台&#xff0c;汇聚了海量的店铺和商品信息。而Python爬虫&#xff0c;就像是那把开启宝藏大门的神奇钥匙&#xff0c;能让我们深…

网工考试——网络安全

信息安全的五要素&#xff1a; 1、机密性&#xff1a; 2、完整性&#xff1a; 3、可用性&#xff1a; 4、可控性&#xff1a; 5、可审查性&#xff1a; 另外还有可鉴别性和不可抵赖性。 网络安全威胁&#xff1a; 类型      定义    2    攻击的安全要素 中断…

Github 2025-01-10 Java开源项目日报Top8

根据Github Trendings的统计,今日(2025-01-10统计)共有8个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目8TypeScript项目1Kotlin项目1C++项目1JeecgBoot 企业级低代码开发平台 创建周期:2062 天开发语言:Java, Vue协议类型:Apache License…

Docker 使用Dockerfile创建镜像

创建并且生成镜像 在当前目录下创建一个名为Dockerfile文件 vi Dockerfile填入下面配置 # 使用 CentOS 作为基础镜像 FROM centos:7# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY bin/ /app/bin/ COPY config/ /app/config/ COPY lib/ /app/lib/ COPY plugin/ /a…

【FPGA】时序约束与分析

设计约束 设计约束所处环节&#xff1a; 约束输入 分析实现结果 设计优化 设计约束分类&#xff1a; 物理约束&#xff1a;I/O接口约束&#xff08;例如引脚分配、电平标准设定等物理属性的约束&#xff09;、布局约束、布线约束以及配置约束 时序约束&#xff1a;设计FP…

腾讯云AI代码助手编程挑战赛-可视化飞线图

文章目录 作品简介项目实现了以下核心功能&#xff1a; 技术架构前端架构 实现过程 项目代码html 部分js 对数据进行清洗 效果展示 作品简介 本项目是借助腾讯云AI代码助手编写的基于ECharts库开发的交互式数据可视化工具。项目通过飞线图的形式&#xff0c;直观展示中国地图上…

汽车扶手屏里的FPC应用有哪些?【新立电子】

汽车扶手屏作为现代汽车内饰设计的一大亮点&#xff0c;通常被安装在座椅扶手位置&#xff0c;其设计初衷是为了方便乘客在乘车过程中进行各种操作和控制。屏幕不仅具备触控功能&#xff0c;还支持语音控制、手势识别等多种交互方式&#xff0c;使得乘客可以更加轻松、直观地操…