Java中,对象作为参数进行传递,传的是值还是地址?
先上结论:
不准确地说:传址
更准确地说:传地址的副本,这个时候入参和形参看做是两个对象 用两个相同的地址指针 指向同一个内存位置
图解:
代码验证:
package com.yst.learn;
public class Test {
public static void main(String[] args) {
A a = new A(2,2);
System.out.println("调用没有更改指向的方法前"+a);
changeA1(a);
System.out.println("调用没有更改指向的方法后"+a);
System.out.println("调用更改指向的方法前"+a);
changeA2(a);
System.out.println("调用更改指向的方法后"+a);
}
public static void changeA1(A a){
}
public static void changeA2(A a){
//刚传过来的a还是指向旧地址的a
//但是方法内部在堆中创建了一个对象,并将a的指向指向新地址
a = new A(20,20);
System.out.println("更改指向后的新对象:"+a);
}
}
class A{
public int a ;
public int b ;
public A() {
}
public A(int a, int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
@Override
public String toString() {
return "A{" +
"a=" + a +
", b=" + b +
'}';
}
}