我正在实现一个带有自定义绘制视图的ListView活动,并拥有以下代码:
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
....
canvas.drawText(String.format("%02d: %dx%d", position, w, h),
10, 15, cached_paint);
}
在onDraw方法中几乎没有其他内容,所以我一直为滚动效果如此糟糕而烦恼。偶然间,我将drawText参数更改为不使用String.format,突然间滚动效果又变得非常流畅。实际上,以下代码几乎相同但表现良好:
canvas.drawText("" + position + ": " + w + "x" + h,
10, 15, cached_paint);
我感到惊讶。为什么直接使用对象串联比调用 String.format 更快?我本以为对象串联会生成更多中间对象,通常会影响性能,但实际上相反。事实上,当使用 String.format 时,我从虚拟机中得到了大量的分配/释放消息。
那么为什么 String.format 如此缓慢,而它明显可以更快(至少在来自其他编程语言的情况下,对象创建很费资源)?