网站首页 > 技术文章 正文
(此处已添加小程序,请到今日头条客户端查看)
首先回答:在Java中参数的传递是按值传递的。按值传递的意思实际上就是传递的是变量的一个副本。既然是副本,那么在传递的那个方法中对这个副本的修改,并不影响那个变量。
然后开始用例子说明:
public static void main(String[] args) {
int x = 1;
System.out.println("main()调用test前x="+x);
test(x);
System.out.println("main()调用test前x="+x);
}
private static void test(int x) {
x*=3;
System.out.println("test()中x="+x);
}
1)x是基本类型的局部变量,所以它存放在栈中
2)x作为参数传递给test,其实传递的是x的一个副本
3)既然是副本,那么test方法中对x的修改并不影响main中的。
运行结果如下:
例2:
public static void main(String[] args) {
P p1 = new P(23);
P p2 = new P(33);
System.out.println("main()调用test前p1的age="+p1.getAge());
System.out.println("main()调用test前p2的age="+p2.getAge());
test(p1,p2);
System.out.println("main()调用test前p1的age="+p1.getAge());
System.out.println("main()调用test前p2的age="+p2.getAge());
}
private static void test(P p1,P p2) {
P tmp = p1;
p1 = p2;
p2 = p1;
}
1)p1作为引用类型的局部变量,存放在栈中。
2)p2作为引用类型的局部变量,存放在栈中。
3)p1和p2作为参数传递给test,其实是传递的p1的副本和p2的副本。
4)既然是副本,那么在test中的改变并不影响main中的p1和p2
5)从堆栈上可以看出:你堆test中的p1和p2进行交换,并不能影响到main中的p1和p2
运行结果如下:
例3:
public static void main(String[] args) {
P p1 = new P(23);
System.out.println("main()调用test前p1的age="+p1.getAge());
test(p1);
System.out.println("main()调用test前p1的age="+p1.getAge());
}
private static void test(P p1) {
p1.setAge(99);
}
1)main中的p1和test中的p1都是指向同一个对象。
2)test中修改的只是对象中的属性值,并不是修改p1本身。
3)从堆栈图上可以看出:
运行结果如下:
(此处已添加小程序,请到今日头条客户端查看)
猜你喜欢
- 2024-10-22 经典问题探讨:Java中为什么只有值传递?
- 2024-10-22 深入理解Java中方法的参数传递机制
- 2024-10-22 什么是按值传递和按引用传递,Python属于哪一种?
- 2024-10-22 为什么Java只有值传递(java为什么要有数据类型)
- 2024-10-22 【Java】中只有值传递,没有引用传递!
- 2024-10-22 阿瑟Java (19):Java 的函数是值传递吗?
- 2024-10-22 Java-值传递(java值传递机制)
- 2024-10-22 你们不要再吵了!Java只有值传递..
- 2024-10-22 Java中的值传递有什么作用?(java 值传递还是引用传递)
- 2024-10-22 java的值传递和引用传递(java 传值传引用区别)
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)