对于此题的内存解析:
Test test = new Test();
创建的test里面存的是一个地址值,它本身是在栈内创建的。
int n = 8因为是局部变量所以也是在栈内,通过test.calc1方法进入栈内调用了将n的值赋给了num,所以此时的计算都是在栈内,num = num+1。
Student stu = new Student();
下面是创建了一个stu,里面存的也是地址值,但是因为stu.age的调用,此时堆空间里面存入了age = 18,通过test.calc2的方法,将age = 18当参数传递到栈内进行计算,计算结果传回到堆内。因为形参的数据类型是类,所以将stu的地址值赋值给了形参student,所以此时一同指向的是堆内存的新的结果值19。
题外:栈内是存局部变量,进行加减乘除等一些列运算,堆内存的是创建的对象。