Java参数传递的两种形式
- 基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的;
对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数;
1. 搞清楚 基本类型 和 引用类型的不同之处
int num = 10;
String str = "hello";
如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为”引用”,引用指向实际对象,实际对象中保存着内容。2. 搞清楚赋值运算符(=)的作用
num = 20;
str = "java";
对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。public static void main(String[] args) {
String a = "A";
System.out.println(a);
changeData(a);
System.out.println(a);
}
private static void changeData(String a) {
a = "B";
System.out.println(a);
}
A B A
String a = “A”; a 保存的是字符串”A”的地址,比如是 0x122
changeDate(a); 传入的是地址 0x122
a = “B”; (等价于a = new String(“B”)) 此时 a保存的是字符串”B”的地址, 比如是 0x123
字符串不可变性
本质:拷贝栈中的内容传递。