今天记录一下传参方式,看下面一个简单的对象变量的传递。
public class Method1{
public static void main(String[] args){
A a = new A();
a.name = "我的名字";
System.out.println(a);
System.out.println(a.name);
Method1 method1 = new Method1();
method1.changeA(a);
System.out.println(a.name);
}
public A changeA(A a){
a.name = "利用方法成功改变A";
System.out.println(a);
return a;
}
}
class A{
public String name;
}
运行结果如图1所示
图1
通过运行结果,我们可以得出。首先,传递的参数的值改变了,其次,它们的哈希值(16进制)相同,即它们指向同一块内存。所以它们只进行了值得传递,只存在一份数据,并没有创建副本。
接下来,我们测试基本数据类型是不是也是进行值传递(对象传递)。
public class Method1{
public static void main(String[] args){
int i = 100;
System.out.println("i ="+ i);
Method1 method1 = new Method1();
method1.changeInt(i);
System.out.println("new i = "+i);
}
public int changeInt(int i){
i = 500;
return i;
}
}
运行结果如图2所示
图2
这验证了基本数据类型的特殊性,它们进行传递的时候会复制出一份副本进行操作,所以导致对整形i的操作无效。