除了范围和存储差异之外,java中的实例和局部变量之间是否还有其他主要区别?
答案 0 :(得分:37)
我看到的主要区别在于:
范围:局部变量仅在声明它们的方法或块中可见,而实例变量可以被类中的所有方法看到。
声明它们的位置:局部变量在方法或块中声明,而实例变量在类中但在方法外部声明。
存在时间:在方法退出时调用方法时会创建局部变量,而在没有引用时,使用new创建实例变量并由垃圾收集器销毁。< / p>
访问:您无法访问本地变量,而如果将实例变量声明为公用变量,则可以访问它们。
声明它们的位置:局部变量在调用之前在方法或块中声明,而实例变量可以在类级别的任何位置声明(即使在使用之后)。
修改强>
我忘了提到实例变量总是有值,即使它没有被代码赋值(那么它们将具有例如null,0,0.0,false)。对于局部变量,代码必须有指定的值,否则编译器会生成错误。
答案 1 :(得分:28)
我能想到的另外一件事:
实例变量被赋予默认值,如果它是对象引用则为null,如果是int,则为0。
局部变量没有得到默认值,因此需要显式初始化(如果你不这样做,编译器通常会抱怨)。
答案 2 :(得分:9)
另一个区别是,您不必担心并发访问本地变量;而你在多线程环境中使用实例变量。
答案 3 :(得分:8)
不,你几乎涵盖了它。实例变量属于类的实例,局部变量属于堆栈帧。
实例变量初始化为默认值,但通常最好使用显式初始化。
答案 4 :(得分:5)
本地变量:
实例变量:
false
,null
等。)答案 5 :(得分:2)
->局部变量在方法主体中声明,可以使用 仅从声明开始到方法结束为止 声明。
->在类中声明实例变量,但在正文中声明实例变量 该类的任何方法。此外,实例变量可供所有人使用 该类的方法。
答案 6 :(得分:1)
除了这里已经提到的所有内容之外,我想指出局部变量访问JVM的速度要快一些。与局部变量相比,JVM需要做更多的工作来读取或写入实例变量。对于当前的Hotspot服务器JVM来说,这仍然是正确的,因为它不是VM优化问题,而是由于实例变量在方法外部可见,因此可以在执行方法时从其他线程访问。
答案 7 :(得分:1)
除了上述所有差异外,我还想指出另一个区别,实例变量可以有访问修饰符(如私有,公共,受保护等),但局部变量没有任何访问修饰符。
答案 8 :(得分:0)
主要区别是实例变量获取默认值,如int value get zero char获取null但不是局部变量。 您可以保留未初始化的实例变量,但必须初始化局部变量,否则会出现编译器错误。
答案 9 :(得分:0)
在方法,构造函数或块中定义的变量称为局部变量。变量将在方法中声明和初始化,并且在方法完成时将被销毁。
实例变量是类中的变量,但在任何方法之外。加载类时会实例化这些变量。
答案 10 :(得分:0)
局部变量在方法中声明。
实例变量在类中声明,但不在方法中声明。
局部变量没有获得默认值。如果在变量初始化之前尝试使用局部变量,编译器会抱怨。
但是,实例变量始终会获得默认值。如果没有为实例变量显式赋值,则实例变量仍具有值。
整数0
浮点0
布尔值false
引用null
答案 11 :(得分:0)
局部变量在堆栈上,而成员变量(实例变量)在堆上。