public class Role {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
/*
* 分析值对象和引用对象?
*/
public class ValueObjectAndReferenceObject {
public static int a=0;
public static String str="bb";
public static void main(String[] args) {
ValueObjectAndReferenceObject v=new ValueObjectAndReferenceObject();
System.out.println("str调用前"+str);
v.str(str);
System.out.println("str调用调用后"+str);
System.out.println("a调用前"+str);
v.valueObject(a);
System.out.println("a调用后"+str);
Role role=new Role();
System.out.println("role调用前"+role.getId());
v.referenceObject1(role);
System.out.println("role调用后"+role.getId());
System.out.println("role调用前"+role.getId());
v.referenceObject2(role);
System.out.println("role调用后"+role.getId());
System.out.println("role调用前"+role.getId());
v.referenceObject3(role);
System.out.println("role调用后"+role.getId());
}
public void str(String str){
str="ccccc";
}
/*
* 八大基础类型都是传递滴是值本身
*/
public void valueObject(int b){
b++;
}
/*
* 引用类型传递的是 引用对象的引用地址值
*/
public void referenceObject1(Role r){
r.setId("1111111");
}
public void referenceObject2(Role r){
Role re=r;//把专递过来滴引用值,赋值给一个新申明滴对象
re.setId("2222222");
}
public void referenceObject3(Role r){
r=new Role();//r指向了一个新对象
r.setId("3333333");
}
}
执行后输出结果:
str调用前bb
str调用调用后bb
a调用前bb
a调用后bb
role调用前null
role调用后1111111
role调用前1111111
role调用后2222222
role调用前2222222
role调用后2222222
通过上面滴输出可以看出,基础类型是值传递这一点是非常肯定的,而关于引用类型滴传递,则有不少争论,有人说是引用传递,也有人说是值传递,不过不管是说值传递者还是引用传递者都有一个共同观点,传递给方法参数滴是这个对象滴地址,个人觉得他们只是所占角度不一而已,因此通过我的分析可以总结成:
1、引用传递-------说是引用传递的,你可以把他理解为,相对于这个对象的实际值来说确实如此,因为传递的是这个对象实际值的一个引用,因此叫引用传递
2、值传递-------值传递的说法者,他们认为虽然传递的是一个这个对象的引用值,但是这个引用本身也是一个值,因此称为值传递!