遇到一道很有意思的面试题,这题很简单,当时看的时候有一个地方看错了,后来立马意识到了,拿出来分析分析。
public class StackHeap_1 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
change(a);
System.out.println(a);
}
public static void change(int a) {
a = 2;
System.out.println(a);
}
}
public class StackHeap_2 {
public static void main(String[] args) {
int[] arr = {1,2};
System.out.println(arr[0]);
System.out.println(arr[1]);
change(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
public static void change(int[] arr){
arr[0] = 6;
arr[1] = 9;
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
这两道程序的输出结果分别是1 2 1, 1 2 6 9 6 9。
这道题可以说是非常的简单了,是java基础里的知识,但需要对内存中的栈和堆中数据的传递有较为清晰的了解。这里我画了个图如下(只画了第二道程序的内存图,看懂了这图这题就解决了,需要对内存进行深入研究的可以参考jvm相关的书籍):