Java中的本地变量和实例变量之间的区别是什么

Gur*_*lki 15 java

除了范围和存储差异之外,java中的实例和局部变量之间是否还有其他主要区别?

Ale*_*lex 38

我看到的主要区别在于:

范围:局部变量仅在声明它们的方法或块中可见,而实例变量可以在类中的所有方法中看到.

声明它们的位置:局部变量在方法或块内声明,而实例变量在类中但在方法外部声明.

存在时间:当方法被调用时会创建局部变量,并在方法退出时销毁,而实例变量是使用new创建的,并且在没有引用时由垃圾收集器销毁.

访问:您无法访问局部变量,而如果将实例变量声明为公共变量,则可以访问它们.

声明它们的位置:局部变量在调用之前在方法或块中声明,而实例变量可以在类级别的任何位置声明(即使在使用之后).

编辑:

我忘了提到实例变量总是有值,即使它没有被代码赋值(那么它们将具有例如null,0,0.0,false).对于局部变量,代码必须有指定的值,否则编译器会生成错误.


Tom*_*rys 29

我能想到的另外一件事:

实例变量被赋予默认值,即如果它是对象引用则为null,如果它是int,则为0.

局部变量不会获得默认值,因此需要显式初始化(​​如果您不这样做,编译器通常会抱怨).


Ste*_*son 9

另一个区别是,您不必担心并发访问局部变量; 而您在多线程环境中使用实例变量.


dan*_*ben 8

不,你几乎涵盖了它.实例变量属于类的实例,局部变量属于堆栈帧.

实例变量初始化为默认值,但通常最好使用显式初始化.


小智 5

局部变量:

  • 在方法/构造函数内部或块内声明(用大括号括起来)
  • 必须在使用前进行初始化,否则将无法编译。

实例变量:

  • 在类中声明。
  • 初始化不是强制性的:如果忽略,它包含默认值(0,0.0, falsenull等)