理解Java引用数据类型(数组、String)传参机制的一个例子

news2024/11/16 15:39:54

目录

  • 理解Java引用数据类型(数组、String)传参机制的一个例子
    • 理解
    • 样例代码
    • 输出
  • 参考资料

理解Java引用数据类型(数组、String)传参机制的一个例子

理解

  1. 引用数据类型传递的是地址。
  2. 用引用类型A给引用类型B赋值,相当于使B指向的地址为A指向的地址。此时修改B地址指向的元素等于修改A地址指向的元素,A原先指向的地址中的内容不变。
  3. 引用类型形参传参,传递的是地址。

样例代码

代码中打印了数组的地址,仔细观察地址的变化,看懂后基本就明白是怎么回事了。
重点观察下面代码中的两个等号(有注释的两个位置)。

  1. 在递归函数中str = str0;之后再把str传给下一个函数(替换了形参的地址)。
  2. 在下一次递归时,又str = str0;,所以1.中的str最开始所指向的地址中的内容并未发生改变。必须使用“=”号把形参的地址传回来,赋给str。注意,此时仍然不是修改所指向的地址中的内容,而是直接修改str的地址!!!
public class Hello{
	public static void main(String[] args){
		ChangeAttr myChangeAttr = new ChangeAttr();
		myChangeAttr.sttt();
	}
}

class ChangeAttr{
	public void sttt(){
		int str[] = {0};
		System.out.println(str);
		str = strr(str, 2); //接收递归最深处的地址,并赋给str
		// 如果没有这一步的 “=” 的话,str就没有变化,因为递归函数没有对str地址的内容进行修改!!!!
		// 递归函数中直接将形参的地址换成了str0的地址,并非修改str地址所指向的元素的内容
		System.out.println(str);
		System.out.println(str[0]);
	}

	public int[] strr(int[] str, int x){
		int str0[] = {str[0] - 1};
		if (x!=0){
			System.out.println(str);
			System.out.println(str0);
			
			str = str0;
			System.out.println(str[0]);
			System.out.println(str);
			System.out.println(str0);
			
			str = strr(str, x-1); //把递归最深处的地址传递给str(最后一次递归、下探)
			// 最终将结果传回sttt()中调用strr的地方
			// 如果没有这一步的 “=” 的话,最后传回sttt()中调用strr的地方的地址是 第一层递归的地址!!!
			// 因为一直没有对str的内容进行更新!!!
			// 每一次调用strr(str, x-1);都是一次递归(一次成功下探),
		}
		System.out.println("re" + str[0] + "" + x + "@" + str0[0]);
		System.out.println(str);
		System.out.println(str0);
		return str;
	}

	// public void sttt(){
	// 	String str[] = {"qwe"};
	// 	str = strr(str, 5);
	// 	System.out.println(str[0]);
	// }

	// public String[] strr(String[] str, int x){

	// 	if (x!=0){
	// 		String str0[] = {str[0] + "" + x};
	// 		str = str0;
	// 		System.out.println(str[0]);
	// 		strr(str, x-1);
	// 	}
	// 	System.out.println("re" + str[0] + "" + x);
	// 	return str;
	// }
}

输出

D:\Java\demo>java Hello
[I@78e03bb5
[I@78e03bb5
[I@5e8c92f4
-1
[I@5e8c92f4
[I@5e8c92f4
[I@5e8c92f4
[I@61e4705b
-2
[I@61e4705b
[I@61e4705b
re-20@-3
[I@61e4705b
[I@50134894
re-21@-2
[I@61e4705b
[I@61e4705b
re-22@-1
[I@61e4705b
[I@5e8c92f4
[I@61e4705b
-2

在这里插入图片描述

参考资料

[1]
[2]
[3]

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

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

相关文章

ERROR:start workflow error,dolphinscheduler log重复刷屏(死循环)直至磁盘存满

在使用ds过后发现,我虚拟机中的磁盘内存全部沾满了 查看目录下大于100M的文件: find / -size 100M 查看后发现问题在于ds产生的日志文件特别大而且多, 查看日志后发现日志中一直都在死循环错误:start workflow error 等 其中文件…

【论文_1992】 REINFORCE » P2 附录

Williams, R. J. Simple statistical gradient-following algorithms for connectionist reinforcement learning. Mach. Learn., 8:229–256, 1992. PDF 下载链接 前面部分:【论文_1992】 REINFORCE P1 文章目录 附录 AA.1. REINFORCE 算法的一些结论A.2. 回合式 …

《深度学习》迁移学习综合应用 原理、案例解析与实现

目录 一、迁移学习 1、什么是迁移学习 2、迁移学习步骤 1)选择预训练的模型和适当的层 2)冻结预训练模型的参数 3)在新数据集上训练新增加的层 4)微调预训练模型的层 5)评估和测试 二、案例实现 1、数据准备…

内网穿透的应用-Windows系统安装SeaFile并实现远程访问本地共享文件资料详细教程

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 下载安装3.2 Cpolar注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 本文主要为大家介绍,如何使用两个简单软件…

如何使用ssm实现基于BS的库存管理软件设计与实现+vue

TOC ssm708基于BS的库存管理软件设计与实现vue 绪论 课题背景 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化。目前,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得到…

【Python报错已解决】ModuleNotFoundError: No module named ‘psutil’

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【无人机设计与控制】基于改进蚁群算法的机器人_无人机_无人车_无人船的路径规划算法

摘要 改进的蚁群算法 (IACO) 通过结合启发式信息和自适应参数调节,优化了机器人、无人机、无人车和无人船的路径规划问题。本文对传统蚁群算法的局限性进行了分析,并提出了一种改进方法,提升了算法的收敛速度和全局搜索能力。通过实验对比&a…

三篇文章速通JavaSE到SpringBoot框架 (中) IO 进程线程 网络编程 XML MySQL JDBC相关概念与演示代码

文章目录 IOfile类的作用I/O的作用将上篇文章综合项目使用IO流升级所需知识点 进程 线程创建线程的三种方式 网络编程网络编程介绍IP地址端口号网络通信协议网络通信协议的分层演示代码 XMLXML的作用是什么?xml特点 注解什么是注解?注解的使用注解的重要…

STM32堆栈溢出Bug

可以看到x和buf交换位置后,x处于0x200006B0地址上是不会被函数B影响到的,实际上B函数对buf赋值的过程是出现了越界行为的,所以导致了x在buf地址之后的话会被意外修改掉值。

管易云·奇门和金蝶云星空接口打通对接实战

管易云奇门和金蝶云星空接口打通对接实战 对接源平台:管易云奇门 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。 写入目标:金蝶云星空…

Python下利用Selenium获取动态页面数据

利用python爬取网站数据非常便捷,效率非常高,但是常用的一般都是使用BeautifSoup、requests搭配组合抓取静态页面(即网页上显示的数据都可以在html源码中找到,而不是网站通过js或者ajax异步加载的),这种类型…

【趣学Python算法100例】冒泡排序

问题描述 对N个整数(数据由键盘输入)进行升序排列。 问题分析 要整理一组相同类型的数,我们可以用一个叫数组的工具来存放它们。冒泡排序,就是通过一次次比较相邻的两个数并交换位置,让原本乱糟糟的数组变得井井有条…

Python画笔案例-066 绘制橙子

1、绘制橙子 通过 python 的turtle 库绘制 橙子,如下图: 2、实现代码 绘制 橙子,以下为实现代码: """橙子.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小化,然后…

【源码+文档+调试讲解】汽车维修管理系统的设计与实现

摘 要 随着计算机技术的高速发展,现代计算机系统已经从以计算为中心向以信息化处理为中心的方向发展。而汽车维修,不仅需要在硬件上为现代社会的人们提供一个汽车维修的平台,获取汽车知识的环境,更要在软件上为车辆提供汽车维修的…

记一次京东自营广电流量卡踩坑

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 最近由于竞合,电信和联通的大流量卡都下架了,29 元的长期套餐流量最多只有 80G 了,想要长期大流量卡只剩下广电这一个选择了。光从套餐上来看 29 元 192G 的流量还是很诱…

Shell 脚本学习

Shell学习 Shell 脚本 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服…

安装了 cursor 之后,我写代码不用手了

最近新一代 AI 编程助手 cursor 爆火。 Cloudflare 副总裁家的 8 岁女儿在 45 分钟内用它搭起了一个聊天机器人。 这个女孩甚至不会编程,只是通过输入一些简单的 prompt 就完成了这样一个聊天机器人。 如果我们通过 RPA 或者智能体的方式,将语音直接转…

著名建筑物检测与识别系统源码分享

著名建筑物检测与识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

c++算法第二天

温馨提示:本篇文章适合刚开始练算法的小白,大佬若见勿嘲 题目 题目解析 遇到0写两遍,非0写一遍,其余非零数右移即可 编写原理 第一步找到最后一个被复写的数 先根据题目所给的例子找到最后一次要复写的数字 20240923_142843 第…

【AI学习】Lilian Weng:Extrinsic Hallucinations in LLMs(LLM 的外在幻觉)

来自OpenAI 的 Lilian Weng的《Extrinsic Hallucinations in LLMs》 Date: July 7, 2024 | Estimated Reading Time: 30 min | Author: Lilian Weng 文章链接:https://lilianweng.github.io/posts/2024-07-07-hallucination/ 大概看了一下,这篇文章的核…