在我的 Android 项目中,有许多 constance 来表示捆绑包的额外键、处理程序的消息参数、对话框 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:使用最终的静态 int = 1 比普通的 1 更好吗?
我希望有人能告诉我静态决赛的内存成本。
对不起,我的英语很差。
你不应该费心把它改成文字,这会让你的代码的可读性和可维护性降低。
从长远来看,您将从这种"失忆"中受益
从技术上讲,他是对的 - 静态 int 字段确实会消耗一些额外的内存。
但是,成本可以忽略不计。它是一个 int,加上反射支持的关联元数据。使用有意义的完整名称的好处是使您的代码更具可读性,并确保该数字的语义是众所周知的,并且在使用它的地方保持一致,显然超过了成本。
您可以做一个简单的测试。编写一个用不同的数字文字调用handler.sendMessage
1000 次的小应用程序,构建它并记下 .dex 文件的大小。然后将 1000 个文本替换为 1000 个静态 int consts,并执行相同的操作。比较两种大小,您将了解您的应用程序需要的额外内存的数量级。(为了完整起见,请在此处发布数字作为评论:-))
它节省了非常少量的内存 - 基本上只是记录相关类中的额外常量并从其他类引用它所需的额外元数据。
不值得担心这一点,除非你的记忆非常有限。
从长远来看,使用命名良好的静态最终常量而不是神秘的幻数对您的代码可维护性和理智性要好得多。