值引用相关探究

1、Java 中所有参数传递都是值传递,没有真正的引用传递。即使是对象引用,传递的也是引用的副本(即引用的值)。

Object A = new Object();

Object B = A;

假如后面有一个参数 new 了过后,

上面的两个参数都没关系了。

public static void main(String[] args) {
ValueReferenceReasearch ValueReferenceReasearch = new ValueReferenceReasearch();
ValueA valueA = new ValueA("A");
String a = new String("a");
ValueReferenceReasearch.set(valueA);
System.out.println(JSON.toJSONString(valueA));
ValueReferenceReasearch.setString(a);
System.out.println(a);
int ina = 4;
ValueReferenceReasearch.setInt(ina);
System.out.println(ina);
ValueA bakA = valueA;
bakA.setName("bakA");
System.out.println(JSON.toJSONString(valueA));
valueA = new ValueA("newVA");
System.out.println(JSON.toJSONString(valueA));
System.out.println(JSON.toJSONString(bakA));
}

public void set(ValueA valueA){
valueA.setName("VA");
}
public void setString(String a){
a="Va";
}

public void setInt(int ina){
ina =3;
}

@Data
public static class ValueA{
String name;

public ValueA(String name) {
this.name = name;
}
}

输出:

{"name":"VA"}
a
4
{"name":"bakA"}
{"name":"newVA"}
{"name":"bakA"}

在Java中,参数传递机制可以分为值传递和引用传递两种方式,但需要特别注意的是:Java中只有值传递,没有真正的引用传递12。

1. 值传递(Pass by Value)

  • ‌基本数据类型‌:传递的是变量的值副本,方法内修改不会影响原始变量13
  • ‌对象类型‌:传递的是对象引用的副本(即地址值的拷贝),而非对象本身47
  • ‌特点‌:方法内对形参的重新赋值不会影响实参36

 

class Person {
    String name;
    Person(String name) { this.name = name; }
}

public class ReferencePassExample {
    public static void main(String[] args) {
        Person p = new Person("Alice");
        modifyObject(p);
        System.out.println(p.name); // 输出"Bob"
    }
    
    static void modifyObject(Person person) {
        person.name = "Bob"; // 修改对象状态
        person = new Person("Charlie"); // 不影响原始引用
    }
}

 

 

 

 

 

 

 

 

posted on 2025-05-05 16:30  Hi Martin  阅读(22)  评论(0)    收藏  举报