Вы используете ==
для сравнения типов строк. Попробуйте использовать age.equals("30")
вместо.
РЕДАКТИРОВАТЬ : чтобы показать, как работает
Если вы используете это как определение cond
:
String cond = "age.equals(\"30\")";
Выход:
sss30
success
В ответ на вопрос об использовании =="30"
ответ на этот вопрос:
Если ваш String age
интернирован, потому что это, например, константа времени компиляции, то может быть истинным.
final String age = "30";
Однако, если вы явно new
String
или иначе не интернированы, то это будет ложь.
String age = new String("30");
Вы можете запустить оба примера, чтобы убедиться в этом. Возможно - вы можете получить fail
для обоих.
Теперь, просто потому, что интернирование существует, не означает, что когда-либо нужно полагаться на него для сравнения String
типов. Оператор ==
должен использоваться только для сравнения примитивов друг с другом и для сравнения ссылочных типов, чтобы увидеть, указывают ли они на один и тот же объект, поэтому для ссылочных типов мы можем сказать, что он видит, если два объекта идентичны вместо равно .
Иногда, благодаря магии JVM и JDK, String
и другие примитивные оболочки, такие как Integer
, могут быть сопоставимы с ==
, но ситуации для этого ограничены и не надежны.