Yes. Expressions get substituted into the final model. The constraint approach will add an extra decision variable and an extra constraint. Some solvers have presolve routines that take care of this, but others, like Ipopt, don’t.
Your second question is related: the substitution happens at the JuMP level before the problem reaches the solver. So the solver will see the objective 4 * x^2 + 2 * x * y - 2x - 1 in the first model.
To summarize: expressions are uniformly good. They can make the code more readable, and JuMP can (in some cases) build the problem more efficiently (particularly @NLexpression when used in @NLconstraint and @NLobjective. @expression less so).