通常假设 toString() 成本较低是否安全?

2022-09-03 08:19:03

您通常是否假设任何给定对象上的toString()具有低成本(即用于日志记录)?我愿意。这个假设有效吗?如果它的成本很高,通常应该改变吗?制作高成本toString()方法的正当理由是什么?我唯一一次担心toString成本的时候是当我知道它是与许多成员的某种集合时。寄件人: http://jamesjava.blogspot.com/2007/08/tostring-cost.html

更新:另一种说法是:在调用之前,你通常会考虑在任何给定的类上调用toString的成本吗?


答案 1

不,它不是。因为ToString()可以被任何人重载,所以他们可以做任何他们喜欢的事情。这是一个合理的假设,ToString()应该具有较低的成本,但是如果ToString()访问执行数据“延迟加载”的属性,您甚至可能在ToString()中命中数据库。


答案 2

编写 Java 标准库的目的似乎是将 toString 调用的成本保持在非常低的水平。例如,Java数组和集合必须使用不循环访问其内容的toString方法;若要获得这些对象的良好字符串表示形式,必须使用包中的一个或从包中使用。Arrays.toStringCollections.toStringjava.util

类似地,即使具有昂贵的等于方法的对象也具有廉价的 toString 调用。例如,该类有一个 equals 方法,该方法利用互联网连接来确定两个 URL 是否真正相等,但它仍然具有一个简单且恒定时间 toString 方法。java.net.URL

所以,是的,便宜的toString调用是常态,除非你使用一些奇怪的第三方软件包,这打破了惯例,否则你不应该担心这些需要很长时间。

当然,在你发现自己处于程序耗时太长的情况下之前,你不应该真正担心性能,即使这样,你也应该使用分析器来弄清楚需要这么长时间的原因,而不是提前担心这种事情。


推荐