当前位置: 首页 > 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]

http://www.lryc.cn/news/446976.html

相关文章:

  • 【计算机组成原理】实验一:运算器输入锁存器数据写实验
  • LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置
  • node js版本低导致冲突WARN EBADENGINE package: required: { node: ‘>=18‘ }
  • 828华为云征文|使用Flexus X实例安装宝塔面板教学
  • 1.量化第一步,搭建属于自己的金融数据库!
  • git-repo系列教程(6) 在自己服务器上搭建git-repo仓库
  • 微服务——服务保护(Sentinel)(一)
  • jenkins声明式流水线语法详解
  • mini-lsm通关笔记Week2Overview
  • 基于SpringBoot的在线点餐系统【附源码】
  • 生成式语言模型底层技术面试
  • HTML开发指南
  • 共筑数据安全防线!YashanDB与SPU完成兼容性互认证
  • 【FastAPI】使用FastAPI和Redis实现实时通知(SSE)
  • Keyence_PL_MC_HslCommunication import MelsecMcNet
  • 软件架构的演变与趋势(软件架构演变的阶段、综合案例分析:在线电商平台架构演变、开发补充)
  • Shopify独立站运营必知必会:选品与防封技巧
  • Unity开发绘画板——03.简单的实现绘制功能
  • R语言的基础知识R语言函数总结
  • 龙年国庆专属姓氏头像
  • 基于Es和智普AI实现的语义检索
  • URI和URL的区别
  • Java 入门指南:获取对象的内存地址
  • 【Linux】项目自动化构建工具-make/Makefile 详解
  • 嵌入式开发中学习C++的用处?
  • 基于SAM大模型的遥感影像分割工具,用于创建交互式标注、识别地物的能力,可利用Flask进行封装作为Web后台服务
  • Selenium入门
  • USB 3.1 Micro-A 与 Micro-B 插头,Micro-AB 与 Micro-B 插座,及其引脚定义
  • MySQL多版本并发控制MVCC实现原理
  • 【并查集】[ABC372E] K-th Largest Connected Components 题解