java交换数据值(值传递和引用传递的区别)

本文介绍了Java中值传递和引用传递的概念。值传递针对基本类型,传递的是副本,不影响原始变量;引用传递针对对象,传递的是对象地址副本,操作会直接影响原对象。Java中的基本类型数据采用值传递,而实例对象则采用引用传递。两者的主要区别在于对内存中数据的操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于值传递和引用传递

1.什么是值传递?

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.

2.什么是引用传递?

引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。

一般认为,java内的基础类型数据传递都是值传递. java中实例对象的传递是引用传递

3.值传递和引用传递的区别

要了解值传递和引用传递的区别,首先要了解什么是基本类型,什么是引用类型;
我们知道JVM的内存划分如下:

基本类型存放于栈内存中,包括变量以及变量的值。在对基本类型进行操作时按置访问,操作的是他们实际保存的值。 基本类型变量的复制:从一个变量向另一个复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。

引用类型是大小不固定的数据,但是他们的地址大小是固定的,所以把地址存在栈中而值存在堆中。引用相当于一个 “别名”, 也可以理解成一个指针.创建一个引用只是相当于创建了一个很小的变量, 这个变量保存了一个整数, 这个整数表示内存中的一个地址.引用访问,当查询时,我们需要先从栈中读取内存地址,然后再找到保存在堆内存中的值。对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性的方法。引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中为新变量分配的空间中,而这个指针副本和原指针指向存储在堆中的同一个对象,复制操作结束后,两个变量实际上将引用同一个对象,因此改变其中一个,将影响另一个。

4.示例

class Myvalue{
    int num;
}
public  class Swap {
    public static void swap(Myvalue m1, Myvalue m2) {
        int tmp = 0;
        tmp = m1.num;
        m1.num = m2.num;
        m2.num = tmp;

    }

    public static void main(String[] args) {
        Myvalue My1 = new Myvalue();
        Myvalue My2 = new Myvalue();
        My1.num = 10;
        My2.num = 20;

        swap(My1, My2);
        System.out.println(My1.num + " " + My2.num);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值