Java究竟是引用传递还是值传递

本文探讨了Java中的参数传递方式,区分了基础类型和引用类型的传递区别。对于基础类型,Java采取值传递,而引用类型则是引用传递。在传递引用类型时,虽然传递的是地址,但对堆内存中的数据修改会直接影响原始数据。文中还通过代码示例解释了这一概念。
摘要由CSDN通过智能技术生成

**

Java是引用传递还是值传递

**

概念

  • 引用传递(pass by reference)

    再调用方法时,将实际的参数地址直接船吊方法中,方法对于参数的修改将会直接影响到实际参数

  • 值传递)(pass by value)

    再调用方法时,将实际参数拷贝一份到方法中,即使方法对参数进行修改,也不会对实际参数产生影响

结论

直接先将结论讲出来,很多人单纯的讲Java就是值传递,从某种意义上来说,没错,但是又不全对,如果有学过c语言指针基础的同学我想这部分知识可以说是索然无味

  • 在传递基础类型时,采用的为值传递
  • 在传递引用类型时,采用的是引用传递

ps:基础 类型只有大家熟悉的八种,除此之外,全部采用的为引用传递

理解:基础类型直接存储在Java的栈中,直接讲数值储存于此,当该变量被调用时,直接复制一份即可,即使对引用的变量进行了修改,也不影响初始变量

在传递引用类型时,将会首先访问栈内存,栈内存存储的是一个地址信息,指向的是堆内存,当我们对储存在堆内存的信息进行修改时,即是对其原始数据进行修改

img

代码实现-基本类型参数为值传递

package com.shut.test;

/**
 * @author chenxu
 * @date 2020/10/22 - 18:13
 */
public class A1 {//java 值传递经典案例
    public void changeString(String name){
        name=name+"wwww";
    }
    public void changeAge(int age){
        age=age+6;
        System.out.println(age);//此处输出的是16
    }
    public void test(){
        int tt=10;
        changeAge(tt);
        System.out.println(tt);//此处输出的为10
        //可以理解为此处,我在changeAge中输出的值为一个copy份
        //只是将tt=10.这个10给他了。而不是将tt本身给他了
    }

    public static void main(String[] args) {
        A1 a1=new A1();
        a1.test();
    }
}

代码实现

package com.shut.test;
/**
 * @author chenxu
 * @date 2020/10/22 - 22:05
 */
public class UserTest {
    public void test(){
        User user=new User();
        change(user);
        user.setAge(88);//change和set方法谁最后执行,那么此处输出的就是哪一个方法改变后的值,因为方法修改的为数据本身
        System.out.println(user.getAge());
    }
    public static void main(String[] args) {
        UserTest userTest=new UserTest();
        userTest.test();
    }
    public void change(User user){
        //user=new User();
        user.setAge(19);
    }
}

水平有限,如有错误,请多指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值