值传递与引用传递:
Java到底是引用传递还是值传递,之前我看过一些介绍,但是好记性不如烂笔头,时间长了最近看到居然又忘了,所以现在记下来,方便以后查看。
既然说到值传递和引用传递,那么到底什么才是值传递,引用传递又是什么呢?
值传递,简单来说就是在操作前对值进行了拷贝,然后两部分操作的就是完全无关的两部分内容了。
public class TempTest {
private void test1(int a){
a = 5;
System.out.println("test1方法中的a="+a);
}
public static void main(String[] args) {
TempTest t = new TempTest();
int a = 3;
t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
System.out.println(”main方法中的a=”+a);
}
}
运行结果:
test1方法中的a=5
main方法中的a=3
引用传递,同样很简单,就是说传递了对对象的引用,也就是地址。进而操作的就是同一片内容,因而执行改动操作就会真正修改原内容了。
public class TempTest {
void test1(A a){
a.age = 20;
System.out.println("test1方法中的age="+a.age);
}
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
a.age = 10;
t.test1(a);
System.out.println(”main方法中的age=”+a.age);
}
}
class A{
public int age = 0;
}
运行结果:
test1方法中的age=20
main方法中的age=20
至于在Java中到底是值传递还是引用传递,我的想法是这样的:
Java只有值传递,没有引用传递:普通变量是直接传递的变量的副本,而若是类做参数,则会拷贝栈中的引用地址,指向堆中的同一片地址,操作同一片内容。但是论其本质,还是值传递,毕竟复制了栈中的内存地址嘛