变量声明?

变量声明?

问题描述:

Case:1 

    class A 
    { 
     private int i=0; 

     public void display() 
     { 
      this.getValue(); 
     } 

     private int getValue() 
     { 
      return i+2; 
     } 

    } 

Case:2 

    class B 
    { 
     public void display() 
     { 
      int i=0; 
      this. getValue(i); 
     } 

     private int getValue(int i) 
     { 
      return i+2; 
     } 
    } 

每当我打电话给 display()时,这两种情况下的“i”声明是否有很大的差异(除全局访问以外)有什么差异 ?变量声明?

+0

您可能想要提及您正在使用哪种语言。答案在C/C++/C#/ Java系列中可能是相同的,但有可能它不是。 – ctford 2009-10-09 11:43:07

在这种情况下效果是相同的,但第一个片段中的类的实例将占用更多的内存。

除第一种情况外,它是一个变量,每次调用时都有相同的地址,并保留该值,但在第二种情况下,它不一定是具有相同地址的变量 - 每次调用时都会重新分配并重新初始化。

因为你其实并不曾改变i变量的值,你应该把它声明为const - 这将给更加清晰的代码。

+0

除非这是Java,否则'const'不存在。 – Jesper 2009-10-09 13:12:42

+0

在Java中对于同样的'最终'不是? – sharptooth 2009-10-09 13:54:16

在第一种情况下i存在任何方法

在第二种情况下i之外只存在时display()方法被调用。如果你想给它持久性,你可以声明它为static

+0

除非这是Java,否则本地静态变量不存在。 – Jesper 2009-10-09 13:13:22

在第一种情况下,我是对象的一部分。当你从类A创建一个对象时,对象为变量“i”分配内存。它会一直保留,直到对象被删除。

但在第二种方式中,当您从类B创建对象时,将不会为变量i分配内存。但是只有当你调用显示函数时 - 在类B-内存变量“我”将暂时分配。 (函数的工作完成后,所有局部变量都将释放)