值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量. 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 一般认为,java内的传递都是值传递. java中实例对象的传递是引用传递 。
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
A a1 = test1.new A();
// ----值传递验证 start--------
System.out.println("值用传递-------------");
int a = 1,b=2;
System.out.println(a+b);
a1.add(a,b);
System.out.println(a+b);
// ----值传递验证 end--------
// ----引用传递验证 start--------
System.out.println("引用传递-------------");
a1.setName("zhangsan");
System.out.println(a1);
System.out.println(a1.getName());
test1.printName(a1);
System.out.println(a1);
System.out.println(a1.getName());
// ----引用传递验证 end--------
}
void printName(A a){
a.setName("liSi");
a = new A();
a.setName("setName");
System.out.println(a);
}
class A{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void add(int a , int b){
System.out.println(a+b);
a = 0;
b=0;
System.out.println(a+b);
}
}
}
控制台输出结果如下:
值传递-------------
3
3
0
3
引用传递-------------
com.jyall.jywallet.cmbc.resource.Test1$A@573fd745
zhangsan
com.jyall.jywallet.cmbc.resource.Test1$A@15327b79
com.jyall.jywallet.cmbc.resource.Test1$A@573fd745
liSi