You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于全局变量:两段代码中哪个globalOrLocal是全局变量?

问题解答

咱们先把两个案例拆开来分析,你之前的理解存在一个关键误区,我给你逐一梳理清楚:

Case I:类内部定义的变量

class A { 
    int globalOrLocal; 
    funcA1() {…} 
    funcA2() {…} 
}

这里的globalOrLocal不是全局变量,它是类A的非静态成员变量(因为没有加static关键字):

  • 它的作用域仅限于A类的实例对象内部,只有创建了A的对象后,这个变量才会分配内存;
  • 内存存储位置取决于对象的创建方式:如果是栈上创建的A对象,这个变量就在栈上;如果是堆上new出来的A对象,它就跟着对象存在堆里;
  • 它不属于全局命名空间,只能通过A的对象(比如A obj; obj.globalOrLocal)来访问(如果是私有成员还得通过类的方法访问)。

Case II:类外部定义的变量

int globalOrLocal; 
class B { 
    funcB1() {…} 
    funcB2() {…} 
}

这里的globalOrLocal才是真正的全局变量:

  • 它定义在所有类、函数的外部,属于全局命名空间;
  • 程序启动时就会分配内存,存储在全局/静态存储区(不是堆,堆是运行时动态分配内存的区域,全局变量的内存是编译器提前分配好的);
  • 整个程序的所有函数、类(只要有权限)都可以直接访问它。

总结一下:只有定义在所有类、函数作用域之外的变量才是全局变量,类内部的成员变量哪怕写在函数外面,也只是类的属性,不属于全局范畴。

内容的提问来源于stack exchange,提问作者P.K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:16:52