JAVA是引用传递还是值传递

Java 是值传递

Java 中的所有参数传递都是值传递。当你将一个对象作为参数传递给方法时,传递的是对象引用的副本,而不是对象本身。

值传递与引用传递基本概念

  1. 值传递(Pass-by-Value):调用方法时,方法接收到的是实际参数值的一个副本。对副本的修改不会影响实际参数本身。
  2. 引用传递(Pass-by-Reference):调用方法时,方法接收到的是实际参数的引用(地址)。对引用的修改会直接影响实际参数。

举例说明

下面的例子说明了 Java 的值传递行为:

public class Test {

    public static void main(String[] args) {
        int primitiveValue = 5;
        System.out.println("Before calling modifyPrimitive: " + primitiveValue);
        modifyPrimitive(primitiveValue);
        System.out.println("After calling modifyPrimitive: " + primitiveValue);
        
        MyObject obj = new MyObject();
        obj.value = 10;
        System.out.println("Before calling modifyObject: " + obj.value);
        modifyObject(obj);
        System.out.println("After calling modifyObject: " + obj.value);
        
        MyObject anotherObj = new MyObject();
        anotherObj.value = 20;
        System.out.println("Before calling reassignObject: " + anotherObj.value);
        reassignObject(anotherObj);
        System.out.println("After calling reassignObject: " + anotherObj.value);
    }

    public static void modifyPrimitive(int number) {
        number = 10;
    }

    public static void modifyObject(MyObject object) {
        object.value = 100;
    }

    public static void reassignObject(MyObject object) {
        object = new MyObject();
        object.value = 200;
    }
}

class MyObject {
    int value;
}

解释

  1. 对原始类型的修改(primitive)

    int primitiveValue = 5;
    modifyPrimitive(primitiveValue);
    

    modifyPrimitive 方法中,numberprimitiveValue 的一个副本。所以对 number 的修改不会影响 primitiveValue

  2. 对对象字段的修改

    MyObject obj = new MyObject();
    obj.value = 10;
    modifyObject(obj);
    

    modifyObject 方法中,objectobj 引用的副本。对象引用本身是一个被复制的值,但它仍然指向同一个对象。因此,方法可以修改对象的字段,所以 obj.value 变成了 100。

  3. 对对象引用的重新赋值

    MyObject anotherObj = new MyObject();
    anotherObj.value = 20;
    reassignObject(anotherObj);
    

    reassignObject 方法中,objectanotherObj 引用的副本。当 object 被重新赋值为一个新的 MyObject 实例时,这个赋值操作只影响 object 引用的副本,并不影响 anotherObj。因此,修改 object.value 不会影响到 anotherObj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值