醉卧山林的执刀人 2017-02-03 01:34 采纳率: 0%
浏览 6055

创建一个对象,他在堆内存中还是在栈内存中

Person p =new Person(“张三”,20);
这样的,我可不可以这样理解new Person(“张三”,20)在堆内存中创建,分配内存地址。
Person p 在栈内存中创建,然后把堆内存中的内存地址付给栈内存中的p变量
我这样理解有错误吗

  • 写回答

10条回答 默认 最新

  • threenewbee 2017-02-03 03:40
    关注

    你根本什么也没有理解,你只是在背绕口令。你需要理解什么呢?你需要理解为什么有堆栈?堆栈是干嘛的。当你使用函数的时候,函数中定义的每个变量都需要找地方存储。函数的调用是可以递归的,也就是说一个函数可以调用自身。
    那么会出现什么问题呢?
    函数中定义的局部变量存在多个副本,看下面的例子:
    int foo(int n)
    {
    if (n == 0) return 0;
    int x = foo(n - 1);
    return x + n;
    }
    当我们调用foo(10)的时候,这个函数中虽然只有一个局部变量x,但是因为递归的关系,它存在同时存在9个的情况。
    很明显,这种情况我们用一个可以一端扩展/收缩的数据结构,也就是堆栈去存储是最简单的。当函数每次调用下一层,就扩张,反之就收缩。
    因此可以得到一个基本的结论,那些函数中定义的局部变量,一定是存放在堆栈上的。除此之外的变量,也就是同一个变量名,它在内存中没有副本的,就放在堆上。

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序