java - 静态变量和实例变量之间的性能差异

标签 java static instance instance-variables

An instance variable is one per Object, every object has its own copy of instance variable.

A static variable is one per Class, every object of that class shares the same Static variable.

class MyStaticClass{
  private static int myStaticInt;

  public static int getMyStaticInt() {return myStaticInt;}
}

class MyInstanceClass{
  private int myNonStaticInt;

  public int getMyNonStaticInt() {return myNonStaticInt;}
}

两者之间有性能差异吗?打电话比打电话更贵吗?

int i = MyStaticClass.getMyStaticInt();

或:

int i = new MyInstanceClass().getMyNonStaticInt();

最佳答案

这不是性能问题。静态变量和实例变量有不同的用途。

使用

int i = new MyInstatnceClass().getMyNonStaticInt();

几乎肯定是无用的,因为每次调用 new MyInstatnceClass() 时,您都会创建一个新的 MyInstatnceClass 实例,并拥有一个新的 myNonStaticInt 实例多变的。由于您没有保留对创建的实例的引用,因此您无法两次检索相同的实例变量,这使得它毫无用处。

如果您需要在类的所有实例之间共享变量的单个副本,则静态变量是最佳选择。

也就是说,后一个调用的范围也更大,因为它涉及 MyInstatnceClass 类的实例的创建和初始化(此外,如果是第一次访问该类,还需要加载和初始化该类) )。

另一方面,MyStaticClass.getMyStaticInt() 仅在第一次访问 MyStaticClass 类时加载并初始化该类。它不必创建该类的任何实例。

关于java - 静态变量和实例变量之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46872166/

相关文章:

java - Eclipse Java 版本在某处设置不正确

php - 如果一个 php 类被定义为 final,那么将它的方法也定义为 final 是否有意义?

java - java中静态通用接口(interface)的替代方案

c++ - 在循环中为 C++ 创建对象

java - 是否可以使用 h :outputLink? 对带有 # anchor 的 URL 进行组件编码

java - JNA:函数及其参数映射究竟是如何从java到VC++的

C# 创建静态类的全局实例

java - 检查动态创建的类是否是一个 Activity

c++ - 在 C++ 中创建实例时出现错误

java - 如何将类型添加到 GWT 的序列化策略白名单?