avoid constructing string unless necessary