java函数传值_Java 函数传参

Java 函数传参

仅作为个人看法

首先声明一下, 在java中函数传参是值传递, 不是引用传递. 要弄清楚这个问题之前要先弄清楚什么是值传递,什么是引用传递.

函数传参有两种方式

值传递 (pass by value): 是指在调用函数时将实际参数复制一份传递到函数中, 这样在函数中如果参数进行修改,将不会影响到实际参数 .

引用传递 (pass by reference): 是指在调用函数时将实际参数的地址直接传递到函数中, 这样在函数如果对参数进行修改, 将影响实际参数

#传递基本类型变量

@Test

public void testParam(){

int i = 10;

pass(10);

System.out.println(i); //10

}

public static void pass(int i){

i=i+1;

}

这里将 `int i = 10` 复制一份, 然后将复制后的基本变量传到函数中, 在函数中对基本变量修改, 因为是两个独立的变量, 所以函数中修改值并不会对实际的参数的值造成影响.

带 '为复制的参数

e190dbd5df586752df612a89d3058997.png

#传递引用类型变量

@Test

public void testParam(){

User user = new User("zs", 1);

pass(user);

System.out.println(user);

}

public static void pass(User u){

u.setUsername("张三");

}

9c786c97841e949b773a87ca9eb5bec2.png

这里的new User() 和new User() ' 都是引用变量, 虽然两个引用变量的地址不同, 但是引用的同一个堆内存中的User, 所以方法中修改对象, 外部也会变

#那么为什么java传递引用类型就是值传递呢?

请看下一个例子

@Test

public void testParam(){

String a="abc";

pass(a);

System.out.println(a);

}

public static void pass(String a){

a = "ABC";

}

加入是引用传递的话传的是一个地址, 那么在函数中修改值的话, 那因该输出的结果是"ABC"

但是呢 结果却是 "abc"

1b8717c8990a933c9c52143eecda6143.png

函数运行完后a' 变量指向了 ABC, 那么就与实际参数无关了, 而方法执行完就出栈了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值