我想知道使用类(带和不带引用)的特定好处,直到计算机科学级别占用内存多少空间。考虑给定的情况:您有一个Button对象,该对象使用一个类来指定其大小,颜色,基本外观,样式等。此类具有return方法,该方法需要一个按钮对象,并将返回一个按钮对象。该类的名称为:ButtonSpecs(下面对象内的方法)
public Button setButton(Button button)
{
button.setPadding(new Insets(20));
button.setOpacity(0.5);
return button;
}
场景1:
Button but1 = new Button("Button1");
but1 = new ButtonSpecs().setButton(button);
Button but2 = new Button("Button1");
but2 = new ButtonSpecs().setButton(button);
方案2:
ButtonSpecs setspecs = new ButtonSpecs();
button1 = setspecs.setButton(button1);
button2 = setspecs.setButton(button1);
由于代码使用本身存在明显的区别,我想知道是否会随着场景1的使用而增加内存,因为不断创建新的ButtonSpecs对象,与场景2相比,该对象仅在没有引用的情况下只能使用一次。其中一个对象是通过引用创建的。
由于ButtonSpecs对象将仅对每个对象“一次”使用,并且永远不会再次被引用,因此除非具有内存优势,否则无需使用引用创建对象。
您的两种情况实际上在多个方面有所不同。他们不仅使用ButtonSpec
的方式不同,方案1创建了2个Button
,而方案2没有创建任何Button
(尽管确实使用了之前创建的一个)。
我想知道是否会随着场景1的使用而增加内存,因为连续创建新的ButtonSpecs对象将比不使用引用创建一个对象的场景2只能在没有引用的情况下使用一次。
方案1确实会使用更多的内存,但是主要原因不是它没有references。内存的使用主要来自创建的对象,而不是对这些对象的引用。这些对象通常比其引用“大”得多。
在方案1中,创建了2个ButtonSpecs
,而在方案2中,只有1个,因此方案1将使用更多的内存。
请注意,此节省的内存量是否真的是beneficial是另一回事,应由探查器确定。在编写代码时,您还应该考虑其他因素,例如样式,可读性和可维护性(而不仅仅是内存!)。