final关键字如何改善性能? (记忆明智或速度明智)

时间:2014-11-04 10:14:17

标签: android

在课程顶部考虑以下声明:

static int intVal = 42;
static String strVal = "Hello, world!";

我们可以使用final关键字提高Android的效果吗?:

static final int intVal = 42;
static final String strVal = "Hello, world!"; 

3 个答案:

答案 0 :(得分:3)

使用static final字段可以提高Android系统的效果。

请参阅Performance Tips - Use Static Final For Constants

上的文档
  

我们可以通过" final"来改善问题。关键字:

     

static final int intVal = 42;

     

static final String strVal ="你好,   世界!&#34 ;;

     

该类不再需要方法,因为常量   进入dex文件中的静态字段初始值设定项。引用的代码   intVal将直接使用整数值42,并访问strVal   将使用相对便宜的"字符串常量"指令   而不是字段查找。

该页面上还有其他有用的提示,用于性能优化。例如,有一个15%-20% increase in performance when accessing static methods vs object methods.


然而,不要过早优化是很重要的。有时候它不值得,而且往往会导致糟糕的编码习惯。正如他们在该页面底部突出显示的那样:

  

在开始优化之前,请确保您遇到问题   需要解决。确保您可以准确地测量现有的   表现,或者你不能衡量的好处   你尝试的替代方案。

答案 1 :(得分:1)

通常不会......只使用final不会提高性能,大多数情况下它用来避免/实现以下事情。

final keyword

  • 以前用过的 stop method overriding
  • 并停止重新分配已初始化的值,表示变量是否为最终it cant be initialized
  • 最后一堂课只是一个can't be extended的班级,意味着它不能成为超级班级

static keyword

  • static 变量可用于引用所有公共属性 对象(对于每个对象而言不是唯一的),例如公司名称 员工,学院学生姓名等。
  • 换句话说,static keyword表示成员变量,或 方法,可以访问而无需实例化 它所属的类。
  • 课程加载时班级区域的static variable gets memory only once

static and final together

  • 仅将变量声明为静态可能会导致其值发生变化 通过声明它的类的一个或多个实例。
  • 将其声明为static final will help you to create a CONSTANT。 只存在一个可以在任何地方访问的副本

答案 2 :(得分:-1)

根据解释here及以下的性能提示,尽可能声明常量静态final是很好的做法。下面是静态和最终静态字段之间的清晰度。

static 意味着它属于类而不是实例,这意味着在特定Class的所有实例之间只共享该变量/方法的一个副本。例如,请考虑这个

public class MyClass {
public static int myVariable = 0; 
}

//Now in some other code creating two instances of MyClass
//and altering the variable will affect all instances

MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();

MyClass.myVariable = 5;  //This change is reflected in both instances

最终静态字段是全局常量例如。

class MyConstants {
   public static final double PI = 3.1415926535897932384626433; 
}