简介
这个是经常出去面试时候,会遇到的一个考点,面试官会出一些基本的传值和传址的题,我们牢牢记住下面这个结论:基本数据类型传递的是值,引用数据类型传递的是地址
。
经典面试题
public class ParameterTest {
public static void main(String[] args) {
int i = 1;
String str = "hello";
Integer num = 200;
int[] arr = {1, 2, 3, 4, 5};
MyData myData = new MyData();
change(i, str, num, arr, myData);
System.out.println("i=" + i + "\n"
+ "str=" + str + "\n" +
"num=" + num + "\n" + "arr=" + Arrays.toString(arr) + "\n"
+ "my.a=" + myData.a);
}
public static void change(int j, String s, Integer n, int[] a, MyData m) {
j += 1;
s += "world";
n += 1;
a[0] += 1;
m.a += 1;
}
}
class MyData {
int a = 10;
}
输出结果
面试考点
- java中的参数传递只有传值和传址。
- 基本类型是传值,无论在方法中进行了何种操作,原值不变。
- 其他引用类型作为参数,是传地址值,方法中对此引用类型数据做了修改,原值会发送变化。
- 当参数类型是对象的时候,如果对对象的值进行了改变,也会改变原对象的值。
- 特殊类型:如String和基本的包装类型等不可变的特性。
总结
栈:基本数据类型、数据的引用变量,这两种存放在栈内存。
堆:new创建的对象(包换数组),是存放在堆内存中,同时分配一个内存地址值,并将其附值给引用他的变量,所以到底是传值还是传址,就可以清晰得出结论。