package rhapp_service;
public class TestZhouy {
public static void main(String[] args) {
/**基本类型:
* 原值不会改变。
* 基本类型在方法中的传递,是值的传递。
* 即将本身的值赋值给方法中的形参中,方法中对形参操作,不影响之前的值。
*/
int a = 1;
test1(a);
System.out.println(a);
/**被final修饰的引用类型:
* string类型也是引用类型,但为什么原值还是不变呢???
* 这就要涉及到string类型的特殊性了,string类型默认是被final修饰的。
* b存放堆中1字符串的地址,将内存地址赋值给x后,b中存放的仍然是1的内存地址。
* 后续操作x对应的对象已不是b对应的对象了,而是b对应对象的复制品,因为字符串是final型的。
* final的理解:
* String x="a";x="b"; //两个字符串a和b都存在,只不过后来x指向了b字符串。
*/
String b = "1";
test2(b);
System.out.println(b);
/**引用类型:
* 原值会改变。
* 引用类型在方法中的传递,也是值的传递,只不过该值为对象的地址。
* 当将该对象地址赋值给方法中的形参,方法中操作的还是该地址对应的原对象。
*/
StringBuffer c = new StringBuffer("1");
test3(c);
System.out.println(c);
/**
* output:
* 1
1
11
*/
}
static void test1(int x){
x = x + x;
}
static void test2(String x){
x = x + x;
}
static void test3(StringBuffer x){
x.append(x);
}
}
总结:
1.方法传参都是值的传递;
2.引用类型传递的是对象地址;
3.被final修饰的变量不能再次赋值,只能对其对象属性修改;