值引用相关探究
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"); // 不影响原始引用 } }




浙公网安备 33010602011771号