1·结论:Java是值传递
2·证明+分析:
1>·首先我们来看一段代码:
public static void main(String[] args) {
int a = 50;
String b = "hello";
changeNum(a,b);
System.out.println("["+a+"]"+","+"["+b+"]");
}
public static void changeNum(int a,String b){
a = 100;
b = "test";
}
最后打印的结果会是什么?
2>·并不意外,如我们一开始的结论是一样的;在分析之前我们需要回顾几个名词儿,形参和实参,值传递。
形参:是在自定义函数中的参数,其生命周期也只在方法内,方法执行过后便会被销毁;
实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,因此应预先用赋值,输入等办法使参数获得确定值。
值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
3>·分析: 可以看出通过方法传递后,我们原先设定的int 类型与 String 类型的原值并没有受到前面changeNum 方法执行后的影响,还是输出了原先的预设值,这种形为通常被说成值传递。如果原值经过方法后被改变了,这种形为通常被描述为引用传递。
3·小总结:
Java 中的基本类型,属于值传递。
Java 中的引用类型,属于引用传递。
Java 中的 String 及包装类,属于特殊群体,作为形参时,由于每次赋值都相当于重新创建了对象,因此看起来像值传递,但是其特性已经破坏了,值传递、引用传递的定义。因此他们属于引用传递的定义,却表现为值传递。