您是否通常假设任何给定对象上的toString()成本较低(即用于记录)?我做.这个假设有效吗?如果成本高,通常应该改变吗?以高成本制作toString()方法的正当理由是什么?我唯一一次关注字符串费用是因为我知道它与某些成员集合在一起.来自:http://jamesjava.blogspot.com/2007/08/tostring-cost.html
更新:另一种说法是:在调用之前,您是否经常考虑在任何给定类上调用toString的成本?
不,这不对.因为ToString()可以被任何人重载,他们可以做任何他们喜欢的事情.可以合理地假设ToString()应该具有低成本,但是如果ToString()访问执行"延迟加载"数据的属性,您甚至可能会在ToString()内部访问数据库.
Java标准库似乎是为了保持toString调用的成本非常低而编写的.例如,Java数组和集合具有toString方法,这些方法不迭代其内容; 要获得这些对象的良好字符串表示,您必须使用Arrays.toString
或Collections.toString
从java.util
包中使用.
类似地,即使具有昂贵的equals方法的对象也具有廉价的toString调用.例如,java.net.URL
该类有一个equals方法,该方法利用互联网连接来确定两个URL是否真正相等,但它仍然具有简单且常量的toString方法.
所以是的,廉价的toString调用是常态,除非你使用一些违反惯例的奇怪的第三方软件包,你不应该担心这些需要很长时间.
当然,你不应该担心性能,直到你发现你的程序花费的时间太长,即便如此,你应该使用一个分析器来弄清楚花费的时间如此之长,而不是担心前面的这类事情.时间
找出答案的最佳方法是分析您的代码.但是,不要担心特定功能有很高的开销,而是(通常)更好地担心应用程序的正确性,然后对其进行性能分析(但要小心现实世界的使用,并且您的测试设置可能根本不同) ).事实证明,程序员通常会猜测他们的应用程序真的很慢,并且他们经常花费大量时间来优化不需要优化的东西(消除那个只占用应用程序时间的0.01%的三重嵌套循环)浪费).
幸运的是,Java有很多开源的分析器.
您是否通常假设任何给定对象上的toString()成本较低?我做.
为什么要这么做?简介如果你正在运行到性能问题的代码; 它会为你节省大量时间来处理错误的假设.