之前都错了
一直理解的是如果传入的是引用类型参数(类对象,数组等),而不是基本数据类型就可以在方法中改变传入的这个参数。不过今天在一个方法中改变一个自定义类型对象时发现传入参数并没有发生变化,这是为什么呢
定义
1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。
2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。
3、方法体内对参数进行运算,不影响原有变量的值。
4、方法体内对参数所指向对象的属性进行操作,将改变原有变量所指向对象的属性值。
例子
原来虽然可以在方法中改变引用类型参数的变量,但不能直接改变引用对象。
public class ListNode{
int val;
ListNode next;
ListNode(int x) {val = x;}
}
public static void main(String[] args) {
TreeNode a = null;
TreeNode b = new TreeNode(2);
TreeNode c = new TreeNode(2);
function(a);
function(b);
function2(c);
System.out.println(a);
System.out.println(b.val);
System.out.println(c.val);
}
public static void function(TreeNode node) {
TreeNode temp = new TreeNode(1);
node = temp;
}
public static void function2(TreeNode node) {
node.val = 1;
}
上面代码输出结果为:
null
2
1
因为对a 和b 在方法中改变其引用,但是引用是不能被改变的。
对c 是在方法中改变其变量,所以变了
为什么这样
因为传参实质上还是传的值,只不过对引用类型传的是地址值,而基本数据类型传的是变量数值。这些传入的值是不会发生改变的:
- 当传的是地址值时,方法中改变地址内的各种变量时,方法返回后,地址里的变量被改变了,但地址没发生变化;如果在方法中改变地址的值,返回后,地址不会发生变化
- 当传入的是数值时,方法中改变数值时,方法返回后,数值没发生变化