标签:int 运算 方法 public his 总结 操作 ring 分析
Java中数据类型分为基本数据类型和引用数据类型,方法的参数分为实际参数,和形式参数。
一般情况下,在数据做为参数传递的时候,基本数据类型是值传递,引用数据类型是引用传递(地址传递)。
1 public static void main(String[] args) {
2 int a = 2;
3 int b = 3;
4 change(a,b);
5 System.out.println("a = " + a);
6 System.out.println("b = " + b);
7 }
8 public static void change(int a1,int b1) {
9 a1++;10 b1++;11 System.out.println("a = " + a1);
12 System.out.println("b = " + b1);
13 }
运行结果:
1 a = 3
2 b = 4
3 a = 2
4 b = 3
流程:
1.主函数进栈,a、b初始化;
2.调用change方法,change()进栈,将a和b的值,复制一份给a1和b1;
3.change方法中对a1和b1进行运算;
4.change方法弹栈;
5.主函数弹栈;
原因分析:
在change方法中,对a1和b1进行赋值,并不会影响到a、b,因为a1、b1中的值,只是从a、b中复制过来的,也就是a1、b1相当于a、b的副本,副本的内容无论怎么修改,都不会影响到原件本身。
1 public static void main(String[] args) {
2 int[] a = {1, 2, 3, 4, 5};
3 change(a);
4 System.out.println(a[0]);
5 }
6 public static void change(int[] array) {
7 array[0] = 0;
8 System.out.println(array[0]);
9 }
运行结果
1 0
2 0
流程:
1.主函数进栈,int[] a初始化;
2.调用change方法,change()进栈,将a的地址值,复制一份给array;
3.change方法中,根据地址值,找到堆中的数组,并将第一个元素的值改为0。
4.change方法运行完毕,数组中第一个元素的值已经改变。
5.change方法弹栈;
6.主函数弹栈;
原因分析:
调用change()方法时,形参array接收的是a地址值的副本。并在change方法中,通过地址值,对数组进行操作。change方法弹栈后,数组中的值已经改变。无论是主函数,还是change方法,操作的都是同一地址值对应的数组。
1 public static void main(String[] args) {
2 String a = "123";
3 change(a);
4 System.out.println(a);
5 }
6 public static void change(String a1) {
7 a1 = "321";
8 System.out.println(a1);
9 }
运行结果是:
1 321
2 123
流程:
1.主函数进栈,a初始化;
2.调用change方法,change()进栈,将a的地址值,复制一份给a1;
3.change方法中,重新创建了一个String对象"321",并将a1指向了新的地址值;
4.change方法运行完毕,a1所指向的地址值已经改变;
5.change方法弹栈;
6.主函数弹栈;
原因分析:
String对象做为参数传递时,走的依然是引用传递,只不过String这个类比较特殊。
String对象一旦创建,内容不可更改。每一次内容的更改都是重现创建出来的新对象。
当change方法执行完毕时,a1所指向的地址值已经改变。而a1本来的地址值就是copy过来的副本,所以并不能改变a的值。
1 public class Test3 {
2
3 public static void main(String[] args) {
4 Person p = new Person("小明");
5 change(p);
6 System.out.println(p.name);
7 }
8 public static void change(Person p1) {
9 Person person = new Person("小红");
10 p1 = person;
11 System.out.println(p1.name);
12 }
13 }
14 class Person {
15 String name;
16 public Person(String name) {
17 this.name = name;
18 }
19 }
运行结果为:
1 小红
2 小明
标签:int 运算 方法 public his 总结 操作 ring 分析
原文地址:https://www.cnblogs.com/wyc1991/p/9060411.html