成员变量和局部变量有什么区别?

31
一个成员变量和一个局部变量有何区别?
它们是相同的吗?

3
请注意,由于您只标记了编程,因此您将收到各种语言的回复。 - Gordon Gustafson
7个回答

45

本地变量是在函数中声明的变量。

成员变量是在类定义中声明的变量。


成员变量等于类变量吗? - utdev
@utdev 我真的这么认为。 - Nguyễn Đức Tâm
"成员变量"是类的非静态变量。但是,根据此链接,在C#中,“类变量”是类的“静态变量”。 https://social.msdn.microsoft.com/Forums/en-US/7e1ac2fd-850d-4eb3-b96c-95149d628cfd/whats-the-difference-between-class-variable-amp-instance-variable-amp-how-many-variable-types-r?forum=csharplanguage - Job_September_2020

33

成员变量是类型的成员,属于该类型的状态。局部变量不是类型的成员,代表本地存储而不是给定类型实例的状态。

然而,这一切都很抽象。以下是一个C#示例:

class Program
{
    static void Main()
    {
        // This is a local variable. Its lifespan
        // is determined by lexical scope.
        Foo foo;
    }
}

class Foo
{
    // This is a member variable - a new instance
    // of this variable will be created for each 
    // new instance of Foo.  The lifespan of this
    // variable is equal to the lifespan of "this"
    // instance of Foo.
    int bar;
}

2
你应该也提到关于栈的一些内容。 - Philippe Leybaert
5
栈是一种实现细节。是的,许多编程语言将局部变量存储在调用栈上,但这并不影响局部变量的定义。我只是提供了一个代码示例来帮助理解我所谈论的抽象概念。 - Andrew Hare
2
我喜欢把成员变量称为“字段”,只是为了减少使用“变量”这个词的次数。 :) - mcjabberz
@mcjabberz - 我也因为这个原因称它们为“字段” :) - Andrew Hare

7

有两种成员变量:实例变量和静态变量。

实例变量的生命周期与类的实例相同,每个实例都有一个副本。

静态变量的生命周期与类相同,整个类只有一个副本。

局部变量在方法中声明,仅在方法返回前存在:

public class Example {
    private int _instanceVariable = 1;
    private static int _staticvariable = 2;

    public void Method() {
        int localVariable = 3;
    }
}

// Somewhere else

Example e = new Example();
// e._instanceVariable will be 1
// e._staticVariable will be 2
// localVariable does not exist

e.Method(); // While executing, localVariable exists
            // Afterwards, it's gone

3
  • 在方法中声明的变量称为“局部变量”。
  • 在类中声明但不在任何方法中声明的变量称为“成员变量”(全局变量)。
  • 在类中声明但不在任何方法中声明且定义为静态的变量称为“类变量”。

2
public class Foo
{
    private int _FooInt; // I am a member variable


    public void Bar()
    {
       int barInt; // I am a local variable
       //Bar() can see barInt and _FooInt
    }

    public void Baz()
    {
       //Baz() can only see _FooInt
    }
}

2

本地变量是您在函数中声明的变量。它的生命周期仅限于该函数。

成员变量是您在类定义中声明的变量。它的生命周期仅限于该类。它是全局变量。可以被同一类中的任何函数访问。


0
一个成员变量属于一个有状态的对象。而局部变量只属于你所在的符号表的作用域。然而,它们在内存中的表示方式基本相同,因为计算机没有类的概念,它只看到代表指令的位。局部变量和成员变量都可以在堆栈或堆上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接