本来今天刚学习的内容,然后去其他博客看了下,发现都吵起来了,就是名字原因,有的说java有值传递和引用传递,有的说引用传递本质就是值传递,我管你杂说的,只要自己理解好,代码知道运行结果就好了。
我用自己的话,自己的理解来解释下,反正都是自己写着玩,自己看的
值传递:传递的值,这个值以后怎么改变,源值不会发生改变的。
引用传递:将对象的引用地址传递过去,如果值发生改变,那么源值也发生改变。
代码如下:
值传递:
public class Test1 {
public static void main(String[] args) {
int a=1;
fun(a);
System.out.println("main中的值"+a);
}
public static void fun(int a){
a=2;
System.out.println("fun中的值"+a);
}
}
console结果:
fun中的值2
main中的值1
引用传递:
class Demo1{
private String msg="hello";
public Demo1(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
public class Test2 {
public static void main(String[] args) {
Demo1 demo=new Demo1("world");
fun(demo);
System.out.println(demo.getMsg());
}
public static void fun(Demo1 demo){
demo.setMsg("hi");
}
}
console结果:hi
补充一个例题:
class Value{ public int i=15; } public class Test{ public static void main(String argv[]){ Test t=new Test( ); t.first( ); } public void first( ){ int i=5; Value v=new Value( ); v.i=25; second(v,i); System.out.println(v.i); } public void second(Value v,int i){ i = 0; v.i = 20; Value val = new Value( ); v = val; System.out.println(v.i+" "+i); } }
console结果:15,0,20