此问题已被问及here。根据答案:
private final int NUMBER = 10;
如果无法更改,则每个实例都没有一个副本。
我怀疑的是,如果创建了一个类的实例,比如说每天一次并持续几秒钟。将int(在某些情况下是对象)保留在内存中是个好主意吗?
假设可能有很多(20-30)个这样的对象。
答案 0 :(得分:3)
如何存储信息在很大程度上取决于它的用途。
您可以采取一些方法:
私人静态决赛
如果在应用程序的生命周期内永远不会修改该值,那么这是一个不错的选择。这意味着,当您创建多个实例时,实际上只存储了这个特定变量ONCE。
私人决赛
这适用于值对于对象的不同实例可能采用不同值的那些时间,但任何特定实例都不会在整个对象的生命周期内修改它的值。
如果您正在查看可能在一段时间内采用不同值的内容,那么您可能会感兴趣。
public static int GetNumber(){...}
您可能考虑的另一种方法是让静态方法返回您所追求的值。这样可以轻松处理值的变化,但您还需要在任何给定实例的整个生命周期中考虑这种变化的影响。
希望有帮助...
答案 1 :(得分:2)
关于private final int number
,您的主张是
如果它无法改变,那么每个实例没有一个副本
绝对错误。请考虑这段代码,这是典型的不可变类:
private final int number;
public MyClass(int number) {
this.number = number;
}
在JDK和全球生产代码类中有许多这种模式的实例。
要回答有关性能的问题,我怀疑您是否可以衡量使用静态与实例常量之间的区别。