值传递与引用传递
1. java方法调动时到底是值传递还是引用传递
package com.zhe.yang.study;/**
* 参数传递方式(值传递?引用传递)
* 看下面例子
* test01对i进行了重新赋值,但是输出i没有变化,为什么,如果是值传递,那么应该变为1
* test02是进行对象参数传递,输出结果变化了,那么这次传递是引用传递吗?如果是引用传递请看test03
* test03对两个对象进行了互换,如果是引用传递,那么这两个对象应该会互换,但是没有互换,为什么?
* 请容二狗,不对,是小黑,往下说
*/
public class ParamTranType {
public static void main(String[] args) {
//test01 输出结果是10
int i=10;
change(i);
System.out.println(i);
//test02 输出结果小黑
Man m=new Man("小红", 23);
changeMan(m);
System.out.println(m.getName());
//test03 输出结果是:小红 小黑
Man m1=new Man("小红", 23);
Man m2=new Man("小黑", 23);
exchangeMan(m1,m2);
System.out.println(m1.getName());
System.out.println(m2.getName());
}
public static void change(int i){
i=0;
}
public static void changeMan(Man m){
m.setName("小黑");
}
public static void exchangeMan(Man m1,Man m2){
Man m=new Man();
m=m1;
m1=m2;
m2=m;
}
}
class Man{
private String name;
private int age;
public Man() {
super();
}
public Man(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//以下是参照java核心技术券Ⅰ进行的解释
针对test01得图解:
在基本类型得参数进行传递得时候,会复制原有值,然后将复制后得值进行传递,所以不会改变原有值得大小
test02得解释:
引用类型再传递得时候,传递得是“对象引用得副本”,但是副本引用和正常对象引用是引用的同一个对象,因此值回发生变化
test03的解释:
两个man进行传递得都是对象引用得副本,在方法中对副本进行交换,对原来得对象引用是没有影响的,因此才没有发生互换得现象
java核心技术卷Ⅰ,139页 上这样说:
一个方法不能修改一个基本数据类型得参数
一个方法可以改变一个对象的状态
一个方法不能让对象参数引用一个新的对象