1

在我的 Android 项目中,有许多常量来表示捆绑额外键、处理程序的消息参数、对话框 id ant 等。我团队中的某个人使用一些正常的数字来执行此操作,例如:

handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 1, 0));
handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 2, 0));
handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 3, 0));

在处理程序中:

switch (msg.arg1) {
case 1:
    break;
case 2:
    break;
case 3:
    break;
}

他说太多的静态最终常量会消耗大量内存。但我认为他的解决方案使代码难以阅读和重构。

我已经阅读了这个问题并用谷歌搜索了很多,但没有找到答案。 java: 使用 final static int = 1 是否比普通的 1 更好?

我希望有人可以告诉我静态决赛的内存成本。

对不起我的英语不好。

4

3 回答 3

5

您不必费心将其更改为文字,它会使您的代码可读性和可维护性降低。

从长远来看,您将受益于这种“失忆”

于 2012-05-09T08:12:01.683 回答
2

从技术上讲,他是对的——静态 int 字段确实需要一些额外的内存。

但是,成本可以忽略不计。它是一个 int,加上反射支持的相关元数据。使用有意义的名称的好处使您的代码更具可读性,并确保该数字的语义是众所周知的,并且无论在哪里使用都是一致的,显然超过了成本。

你可以做一个简单的测试。编写一个使用不同数字文字调用handler.sendMessage1000 次的小应用程序,构建它并记下 .dex 文件的大小。然后用 1000 个静态 int 常量替换 1000 个文字,并执行相同操作。比较这两种大小,您将了解您的应用程序需要的额外内存的数量级。(为了完整起见,请在此处发布数字作为评论:-))

于 2012-05-09T08:25:16.137 回答
0

它节省了非常少的内存——基本上只是在相关类中记录额外常量并从其他类中引用它所需的额外元数据。

除非您的内存非常有限,否则不必担心这一点。

从长远来看,使用命名良好的静态最终常量而不是神秘的幻数对于您的代码可维护性和健全性要好得多。

于 2012-10-21T03:11:23.543 回答