很多人说,Java不光有值传递,还有引用传递,在CSDN和博客园都有很多类似的贴子,通过那种"看似"有说服力的代码和例子证明引用传递的存在性,我想让诸君花五分钟看看我的解释
首先明确一点! Java只有 只有 只有 值传递
public class demo {
public static void main(String[] args) {
int a = 1;
change(a);
System.out.println(a);
}
public static void change(int x){
x=10;
return;
}
}
这几行简单的代码相信大家都能看得懂,从结果就能看出,a只是在方法里面change方法里面“走了一遭”,而他的值没有改变,很容易理解这是值传递
然后放出一些人很爱用来”说事“的代码
package com.ycy;
public class demo {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//结果是null
demo.change(person);
System.out.println(person.name);//结果是ycy
}
public static void change(Person a)
{a.name = "ycy";}
}
//定义了一个Person类,有一个name属性
class Person{
String name;
}
有人会说,name打印出来不一样啊!!这不就是引用传递吗!!
一句关键句
person是一个引用,指向的是Java堆里面的对象!
change方法改变的name其实修改的是Person类,导致最终输出的结果不一样了,本质上来说,这不是引用传递