### Question:
TemplateExpressionImpl extends ExpressionBase<T> implements TemplateExpression<T> { @Override public final boolean equals(Object o) { if (o == this) { return true; } else if (o instanceof TemplateExpression) { TemplateExpression<?> c = (TemplateExpression<?>) o; return c.getTemplate().equals(template) && c.getType().equals(getType()) && c.getArgs().equals(args); } else { return false; } } protected  TemplateExpressionImpl(Class<? extends T> type, Template template, Object... args); protected  TemplateExpressionImpl(Class<? extends T> type, Template template, ImmutableList<?> args); @Override final Object getArg(int index); @Override final List<?> getArgs(); @Override final Template getTemplate(); @Override final boolean equals(Object o); @Override final R accept(Visitor<R, C> v, C context);  }### Answer:
@Test public void equals() { Expression<?> expr1 = ExpressionUtils.template(String.class, "abc", "abc"); Expression<?> expr2 = ExpressionUtils.template(String.class, "abc", "def"); assertFalse(expr1.equals(expr2)); }