当前位置:网站首页>关于局部变量
关于局部变量
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、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。
边栏推荐
- Occt learning 001 - Introduction
- 直播预告|如何节省30%人工成本,缩短80%商标办理周期?
- Best practices of JD cloud Distributed Link Tracking in financial scenarios
- Complete ecological map of R & D Efficiency & selection of Devops tools
- 【剑指offer】— 详解库函数atoi以及模拟实现atoi函数
- 365天挑战LeetCode1000题——Day 039 完全二叉树插入器 + 寻找峰值 II + 快照数组
- QT series - Installation
- 平行云CEO 李岩:CloudXR ,开启通往元宇宙的通道
- WDDM learning
- 365天挑战LeetCode1000题——Day 036 二叉树剪枝 + 子数组和排序后的区间和 + 删除最短的子数组使剩余数组有序
猜你喜欢

直播预告|如何通过“智能边缘安全”提升企业免疫力?

Yangyonglin, vice president of Rushi Technology: when traditional industries encounter "digital space"

R & D efficiency | analysis of kubernetes' core technology and Devops' landing experience

Xiaobai high salary shortcut Qt development game Snake

牛客网编程题—【WY22 Fibonacci数列】和【替换空格】详解

【活动预告】云上数字工厂与中小企业数字化转型创新论坛

Live broadcast preview | how to save 30% labor cost and shorten 80% trademark processing cycle?

Live broadcast preview | how to improve enterprise immunity through "intelligent edge security"?

平行云CEO 李岩:CloudXR ,开启通往元宇宙的通道

直播预告:京东云DevOps与JFrog制品库的融合
随机推荐
直播预告:京东云DevOps与JFrog制品库的融合
365天挑战LeetCode1000题——Day 039 完全二叉树插入器 + 寻找峰值 II + 快照数组
QT learning: qdropevent drag event
Live broadcast preview | how to save 30% labor cost and shorten 80% trademark processing cycle?
osg3.6.5编译freetype失败
C语言 一级指针
365天挑战LeetCode1000题——Day 037 元素和小于等于阈值的正方形的最大边长 + 满足条件的子序列数目
C语言用指向指针的指针对n个整数排序
容器安全开源检测工具--问脉 VeinMind(镜像后门、恶意样本、敏感信息、弱口令等)
抽象类与接口
MySQL的基础概念+数据库系统结构+拓展延申+基础命令学习
【C语言系列】—深度解剖数据在内存中的存储(一) 暑假开篇
【C语言系列】— 打印100~200之间的素数
APP常用跨端技术栈深入分析
Helm chart for Kubernetes
365天挑战LeetCode1000题——Day 035 每日一题 + 二分查找 13
Best practices for elastic computing in the game industry
QML control: combobox
阿里云张新涛:异构计算为数字经济提供澎湃动力
01-01-osg GL3 环境搭建