【发布时间】:2011-11-13 23:39:46
【问题描述】:
我问这个问题纯粹是为了问题的速度方面。
当对象是私有或公共 (Java) 时,从对象获取值的速度有何不同?
class MyClass {
public int myInt = 5;
}
class MyOtherClass {
private int myInt = 5;
public int getMyInt() {
return myInt;
}
}
class MyMainClass {
public static void main (String [] args) {
MyClass myObject = new MyClass();
MyOtherClass myOtherObject = new MyOtherClass();
// which is faster?
System.out.println(myObject.myInt);
System.out.println(myOtherObject.getMyInt ());
}
}
我知道我可以测试它,但如果有人已经知道它,它不会受到伤害:) 提前致谢!
【问题讨论】:
-
您应该对其进行测试。而且你不应该对它进行微基准测试,而是在一个实际上做了一些有用工作的大型程序上尝试它,让它运行一分钟,因为那是优化最重要的维度。每次您考虑进行微优化时都这样做,直到从您的思考过程中消除浪费的能量。
-
@delnan,我不确定你的意思。如果您的意思是在大型程序的上下文中,
particular优化可能会带来不可估量的好处,这在定义上是正确的。就普遍适用的理解哪种方式更好而言,特殊编码的测试不会提供信息吗?当然,您可能想要迭代很长时间,因为您不知道内存管理功能何时运行等。我认为不需要真正的程序来做真正的工作。 -
@broiyan:如果它仅对微基准测试有任何(相关)影响,那么实际解决问题的程序不会从中受益。如果它不能加快解决实际问题的速度,它会增加零价值,不值得担心。没有人关心它是否会让你的微基准测试运行得更快。如果有技术深度(例如,由于封装较少而导致设计更差),这将是三次。即使在执行大量其他操作的实际程序中,值得担心和实施的优化也会带来可衡量的好处(记住 80-20 规则!)。
标签: java performance variables