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/