在 RegExpMatcher 的例子中, 你看见了 当一个方法返回一个 String 类型时, 它通常需要新建一个 String 对象. BadRegExpMatcher 的一个问题就是 match() 返回一个对象而不是一个原类型 -- 但是只因为一个方法返回一个对象, 不意味着必须有一个新对象创建. 考虑一下 java.awt 中的几何类, 象 Point 和 Rectangle. 一个 Rectangle只是四个整数(x, y, 宽度, 长度)的容器, AWT Component 类存储组件的位置, 通过getBounds()作为一个Rectangle 返回,getBounds() 只是一个存储元 -- 它只使一些 Component 内部的一些状态信息可用. getBounds() 需要创建它返回的 Rectangle 吗? getBounds(), 没有新对象创建 -- 因为组件已经知道它在哪里 -- 所以 getBounds() 效率很高. 但是 Rectangle 的可变性又有了其他问题. 当一个调用者运行一下程序会发生什么呢?Rectangle 是可变的, 它在 Component 不知道的情况下使 Component 移动. 对象AWT 这样的 GUI 工具箱来说, 这是个灾难, 因为当一个组件移动以后, 屏幕需要重绘, 组件监听器需要被通知, 等等. 所以上面的实现 Component.getBounds() 的代码看起来很危险. 但是现在, 每一个 getBounds() 的调用都创建一个新对象, 就象 RegExpMatcher 一样.在 String 的情况中, 对象创建是必要的, 因为 String 是不可变的. 对象的创建也是必要的, 因为 Rectangle 是可变的. 我们使用 String 避免了这个问题,在我们的接口中没有使用对象. 虽然在 RegExpMatcher 的情况下很好, 这个方法不总是可行的或者是希望的. 幸运的是, 你可以在实际类的时候可以使用一些技巧, 来免除太多小对象的问题, 而不是完全避免小对象.
【招生办】
成都铁路卫生学校
联系人:杨老师
咨询电话:028-81459650
移动电话:13096365338
咨询QQ:2763031284
邮箱:2763031284@qq.com
地址:四川省成都市郫县团结
网址:
成都铁路卫生学校 http://www.tineng.net/
高考200分能上什么大学 http://www.57fenshu.com/
成都纺织高等专科学校 http://www.bangboer.com/ucdtc/ |
 |
|