Java 不会传递地址, 只会传递值。
什么叫传递值:
// 传递的是值的拷贝, 不同内存空间, 改变不会影响
1.定义以一个基本数据类型A, 参数传递过去,调用者改变这个A值之后不影响我原来的A
//传递的是对对象的应用, 同一个内存空间,改变当然影响
2.定义一个 对象A , 作为参数传递过去,调用者改变这个对象,原来的A受到影响。
看这俩例子就懂了
- 基本数据类型 ,传递值的拷贝,前后不影响
public class TempTest {
private void test1(int a){
a = 5;
System.out.println("test1方法中的a="+a);
}
public static void main(String[] args) {
TempTest t = new TempTest();
int a = 3;
t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
System.out.println(”main方法中的a=”+a);
}
}
test1方法中的a=5
main方法中的a=3
- 引用数据类型, 传递前后指向同一块地址,前后影响
public class TempTest {
private void test1(A a){
a.age = 20;
System.out.println("test1方法中的age="+a.age);
}
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
a.age = 10;
t.test1(a);
System.out.println(”main方法中的age=”+a.age);
}
}
class A{
public int age = 0;
}
test1方法中的age=20
main方法中的age=20
但是一旦调用者开辟新内存空间, 前后就不影响了
public class TempTest {
private void test1(A a){
a = new A();//新加一行
a.age = 20;
System.out.println("test1方法中的age="+a.age);
}
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
a.age = 10;
t.test1(a);
System.out.println(”main方法中的age=”+a.age);
}
}
class A{
public int age = 0;
}
test1方法中的age=20
main方法中的age=10
你可以把 基本数据类型 和 初始化过的String 记为不影响,其他记为影响
初始化过的String也就是 String s="asd’; 这种的,传s过去,他改不变原来的s
就这两种情况