当前位置: 首页 > news >正文

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

目录

  • 理解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]

相关文章:

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

目录 理解Java引用数据类型(数组、String)传参机制的一个例子理解样例代码输出 参考资料 理解Java引用数据类型(数组、String)传参机制的一个例子 理解 引用数据类型传递的是地址。用引用类型A给引用类型B赋值,相当于…...

【计算机组成原理】实验一:运算器输入锁存器数据写实验

目录 实验要求 实验目的 主要集成电路芯片及其逻辑功能 实验原理 实验内容及步骤 实验内容 思考题 实验要求 利用CP226实验箱上的K16~K23二进制拨动开关作为DBUS数据输入端,其它开关作为控制信号的输入端,将通过K16~K23设定…...

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置 开机,BIOS自检,可以看到设备硬盘信息,以及提示CtrlR进入Raid卡配置界面。 按CtrlR进入Raid卡配置界面,一般来说使用CtrlR进入Raid卡配置界面的Raid卡配置都通用。 …...

node js版本低导致冲突WARN EBADENGINE package: required: { node: ‘>=18‘ }

重新安装依赖包 1、删除旧的 node_modules 目录和 package-lock.json 文件: rm -rf node_modules rm package-lock.json2、升级node版本 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bashexport NVM_DIR"$([ -z "${…...

828华为云征文|使用Flexus X实例安装宝塔面板教学

目录 一、Flexus X实例简介 1.1 概述 1.2 产品规格 二、切换操作系统 2.1 Huawei Cloud EulerOS 2.0 标准版 2.2 切换镜像 三、部署宝塔面板 3.1 安装宝塔面板 3.2 放通安全组规则 3.3 登录宝塔面板 四、使用感受 4.1 柔性算力随心配 4.2 一直加速一直快 4.3 越用…...

1.量化第一步,搭建属于自己的金融数据库!

数据是一切量化研究的前提。 做量化没有数据,就相当于做饭时没有食材。 很多时候,我们需要从大量的数据中寻找规律,并从中开发出策略。如果我们每次使用的时候,都从网上去找数据,一方面效率低下,另一方面短…...

git-repo系列教程(6) 在自己服务器上搭建git-repo仓库

为什么要在自己的服务器上搭建git-repo仓库呢? 因为 清华大学开源软件镜像站 有时会更新同步git repo,导致不能使用.可能在局域网不能访问外网,无法下载镜像站上的git-repo仓库完全版. 操作步骤 1.获取git-repo仓库 需要先下载完全的仓库 cd .repo/repo/ #获取镜像站上的…...

微服务——服务保护(Sentinel)(一)

1.雪崩问题 级联失败或雪崩问题指的是在微服务架构中,由于服务间的相互依赖和调用,当一个服务出现故障时,会引起调用它的服务也出现故障,进而引发整个调用链路的多个服务都出现故障,最终导致整个系统崩溃的现象。 产生…...

jenkins声明式流水线语法详解

最基本的语法包含 pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中stages:包含一系列一个或多个stage指令stage:stage包含在stages中进行,比如某个阶段steps:在阶段中具体得执行操作,一个或…...

mini-lsm通关笔记Week2Overview

Week 2 Overview: Compaction and Persistence 在上周,您已经实现了LSM存储引擎的所有必要结构,并且您的存储引擎已经支持读写接口。在本周中,我们将深入探讨SST文件的磁盘组织,并研究在系统中实现性能和成本效益的最佳方法。我们…...

基于SpringBoot的在线点餐系统【附源码】

​基于SpringBoot的高校社团管理系统(源码L文说明文档) 4 系统设计 4.1 系统概述 网上点餐系统的结构图4-1所示: 图4-1 系统结构 模块包括主界面,首页、个人中心、用户管理、美食店管理、美食分类管理、美食…...

生成式语言模型底层技术面试

在准备生成式语言模型的底层技术面试时,可以关注以下几个关键领域: 1. 模型架构 Transformer架构:了解自注意力机制、编码器-解码器结构,以及如何处理序列数据。预训练与微调:解释预训练和微调的过程,如何…...

HTML开发指南

目录 一、HTML基础1. HTML简介(1)标记语言(2)结构化文档(3)标签与属性(4)注释(5)版本演变 2. HTML文档结构(1)文档类型声明&#xff0…...

共筑数据安全防线!YashanDB与SPU完成兼容性互认证

近日,深圳计算科学研究院崖山数据库系统YashanDB与深圳市机密计算科技有限公司SPU机密计算协处理器顺利完成兼容性互认证。测试结果表明,双方产品完全兼容,稳定运行,能为用户提供全链路的数据安全管理解决方案,助力央国…...

【FastAPI】使用FastAPI和Redis实现实时通知(SSE)

在当今快速发展的Web应用程序中,实时通知已成为用户体验的重要组成部分。无论是社交媒体更新、消息通知,还是系统状态提醒,实时数据推送可以极大地提升用户互动性。本文将详细介绍如何使用FastAPI和Redis实现Server-Sent Events (SSE) 来推送…...

Keyence_PL_MC_HslCommunication import MelsecMcNet

import tkinter as tk from tkinter import messagebox from datetime import datetime from HslCommunication import MelsecMcNet, OperateResult def 创建_plc_应用程序(): class 应用程序(tk.Tk): def __init__(self): super().__init__() …...

软件架构的演变与趋势(软件架构演变的阶段、综合案例分析:在线电商平台架构演变、开发补充)

随着软件开发技术的不断进步,软件架构从最初的简单结构演变为如今的复杂系统,架构设计不再是简单的代码组合,而是战略性的系统设计,确保系统具备可扩展性、可靠性、安全性和可维护性。 文章目录 1. 软件架构演变的阶段1.1 单体架…...

Shopify独立站运营必知必会:选品与防封技巧

独立站和第三方平台是目前最常见的跨境电商销售模式,相比于第三方平台,独立站的商家可以自己建站,自行决定运营模式和营销手段等策略,尤其是在准入门槛上,难度会更低,这些特点吸引了不少商家选择独立站开店…...

Unity开发绘画板——03.简单的实现绘制功能

从本篇文章开始,将带着大家一起写代码,我不会直接贴出成品代码,而是会把写代码的历程以及遇到的问题、如何解决这些问题都记录在文章里面,当然,同一个问题的解决方案可能会有很多,甚至有更好更高效的方式是…...

R语言的基础知识R语言函数总结

R语言与数据挖掘:公式;数据;方法 R语言特征 对大小写敏感通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母)。不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头&…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

数据结构:递归的种类(Types of Recursion)

目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...