В частности, в V8, если вы проверите сгенерированный байт-код (node --print-bytecode
), вы получите что-то вроде этого:
> return "..."
LdaConstant [0]
Return
> return new String("...")
LdaGlobal [0], [0]
Star r0
LdaConstant [1]
Star r1
Ldar r0
Construct r0, r1-r1, [2]
Return
, что в основном означает, что строковый литерал просто загружает указатель из пула констант, в то время как new String
включает в себя гораздо больше шагов - загрузка глобального объекта String
, загрузка константы, вызов универсального метода Construct
. Я полагаю, что в FF или любом другом движке все мало чем отличается