当前位置:网站首页>关于局部变量
关于局部变量
2022-07-29 05:09:00 【小洪正在努力】
关于局部变量(易错)
在java中只有传值调用,没有传址调用。
直接看个案例:
- A()方法将a变量每次调用都加1;
- B()方法将b变量从小写b改成大写B;
- C()方法将c[0]从"c"改成"C";
public class Test3 {
@Test
public void test() {
int a = 0;
char b = 'b';
char[] c = {
'c'};
A(a);
B(b);
C(c);
System.out.println("a变量最终:" + a);
System.out.println("--------------------------------------------------------");
System.out.println("b变量最终:" + b);
System.out.println("--------------------------------------------------------");
System.out.println("c[0]变量最终:" + c[0]);
}
public void A(int a){
if(a != 2){
System.out.println("局部a:" + a);
a += 1;
A(a);
}
}
public void B(char b){
b = 'B';
System.out.println("局部b:" + b);
}
public void C(char[] c){
c[0] = 'C';
System.out.println("局部c:" + c[0]);
}
}
先来看看局部变量的变化:
可以发现局部变量a,b,c都能按要求变化。
再来看看成员变量的变化:

可以发现a,b变量并没有变化,这也印证了在java中只有传值调用,没有传址调用。
也就是说:
- 对于基本数据类型,实现的是传值,只是个形参,不会改变原有值。
- 对于引用数据类型,对这个引用进行操作,其实也是相当于对形参的操作,不会改变原来的引用。
- 但是,当对这个引用的属性进行操作的时候,相当于CPP中的传址调用,可以改变这个引用的属性的值。
总结
1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。
2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。
3、方法体内对参数进行运算,不影响原有变量的值。
4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。
边栏推荐
- Alibaba cloud architect Liang Xu: MES on cloud box helps customers quickly build digital factories
- CSDN的md编辑器如何输入上下标?公式和非公式的输入方式不一样
- vim编辑器使用
- 365天挑战LeetCode1000题——Day 040 设计跳表 + 避免洪水泛滥 + 查找大小为 M 的最新分组 + 销售价值减少的颜色球
- ANSI C类型限定符
- QML type: mousearea
- MySQL的详细安装使用教程(保姆式安装图文讲解)
- 167. Sum of two numbers II - enter an ordered array
- 法线可视化
- 来!看排名一年上升16位的ClickHouse,如何在京东落地实践
猜你喜欢

【C语言系列】—三种方法模拟实现strlen库函数的方法

How rimworld uploads creative workshops through steamcmd

Container security open source detection tool - veinmind (mirror backdoor, malicious samples, sensitive information, weak password, etc.)

C语言宏#define命令练习

阿里云架构师梁旭:MES on 云盒,助力客户快速构建数字工厂

365天挑战LeetCode1000题——Day 042 数组序号转换 + 相对名次 离散化处理

Alibaba cloud architect details nine trends in the game industry

OCCT学习003-----MFC单文档工程

研发效能生态完整图谱&DevOps工具选型必看

OCCT学习001-----简介
随机推荐
【C语言系列】—深度解剖数据在内存中的存储(一) 暑假开篇
MySQL的基础概念+数据库系统结构+拓展延申+基础命令学习
365天挑战LeetCode1000题——Day 036 二叉树剪枝 + 子数组和排序后的区间和 + 删除最短的子数组使剩余数组有序
如视技术副总裁杨永林:当传统产业遇到“数字空间”
C语言数组典型应用代码详细讲解—高手误入(逐步代码详解)
【赛事预告】云上开发,高效智能——第二届阿里云ECS CloudBuild开发者大赛即将启动
51万奖池邀你参战!第二届阿里云ECS CloudBuild开发者大赛来袭
存储类别
2022数学建模竞赛暑期培训讲座——最优化方法:目标规划
【C语言系列】— 不创造第三个变量,实现两个数的交换
京东云分布式链路追踪在金融场景的最佳实践
阿里云张新涛:异构计算为数字经济提供澎湃动力
抢先预约 | 阿里云无影云应用线上发布会预约开启
365天挑战LeetCode1000题——Day 038 公交站间的距离 + 基于时间的键值存储 + 转变数组后最接近目标值的数组和 + 有界数组中指定下标处的最大值
C语言宏#define命令练习
Alibaba cloud architect Liang Xu: MES on cloud box helps customers quickly build digital factories
Live broadcast preview | how to save 30% labor cost and shorten 80% trademark processing cycle?
【C语言系列】—三种方法模拟实现strlen库函数的方法
510000 prize pool invites you to fight! The second Alibaba cloud ECS cloudbuild developer competition is coming
WDDM learning