Java传参

之前都错了

一直理解的是如果传入的是引用类型参数(类对象,数组等),而不是基本数据类型就可以在方法中改变传入的这个参数。不过今天在一个方法中改变一个自定义类型对象时发现传入参数并没有发生变化,这是为什么呢

定义

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 是在方法中改变其变量,所以变了

为什么这样

因为传参实质上还是传的值,只不过对引用类型传的是地址值,而基本数据类型传的是变量数值。这些传入的值是不会发生改变的:

  • 当传的是地址值时,方法中改变地址内的各种变量时,方法返回后,地址里的变量被改变了,但地址没发生变化;如果在方法中改变地址的值,返回后,地址不会发生变化
  • 当传入的是数值时,方法中改变数值时,方法返回后,数值没发生变化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值