1.可以通过传参改变非基本类型对象的属性、状态
public class Test {
public int b;
public static void change(Test test)
{
test.b*=3;
}
public static void main(String[] args) {
Test test=new Test();
test.b=10;
change(test);
System.out.println(test.b);
}
}
输出结果:
分析:非基本类型的对象的名字存储在栈中,值存储在堆中,当我们使用改变值的方法时,jvm会根据栈中存储的对象的地址在堆中找到这个对象,然后修改它的值,所以修改的就是实实在在的对象的值,而不是什么拷贝,因此可以通过传参改变非基本类型对象的属性、状态,这里的属性、状态指的是类中的成员变量,包括类中的基本类型和非基本类型的成员变量。
2.不可以通过传参改变基本类型对象(数值型或布尔型)的值
public static void change(int x)
{
x*=3;
}
public static void main(String[] args) {
int a=5;
change(a);
System.out.println("a:"+a);
}
输出结果:
分析:基本类型的对象的名字和值都存储在栈中,在执行改变值的方法时,相当于对原对象进行了拷贝,然后改变了拷贝出来的对象的值,原对象的值并没有改变,所以我们输出原对象当然值是不变的。
3.不可以通过传参让原有对象引用到新的对象
public class Test {
public int b;
public static void change(Test test1,Test test2)
{
Test temp=test1;
test1=test2;
test2=temp;
}
public static void main(String[] args) {
Test test1=new Test();
test1.b=5;
Test test2=new Test();
test2.b=3;
change(test1,test2);
System.out.println("test1:"+test1.b);
System.out.println("test2:"+test2.b);
}
}
输出结果: