Является ли a == b
всегда true
во всех Java-совместимых реализациях?Является ли оптимизация пула строк, определенная Java?
String a = "abc";
String b = "abc";
if (a == b)
System.out.println("True");
меня спросили, True
будет напечатано в собеседовании. Я знал, что a
и b
могут указывать на тот же "abc"
как на оптимизацию, но я не был уверен, стандартизирована ли эта оптимизация или это конкретное поведение реализации.
В вашем примере да. Вы используете [строковые литералы] (http://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal), которые java будет объединяться как один с помощью [String interning] (https: // en .wikipedia.org/вики/String_interning). Это не сработает, если вы создадите строковые объекты, что может случиться легко, поэтому ответ на собеседование должен содержать то, что, в то время как это работает в этом случае, это небезопасно, потому что вы можете скопировать код в место, где оно не работает, т работы. – Aziuth
Высказывание вашего комментария о том, что вы удалили о том, что вы не ответили в интервью, в связи с этим: Итак, вы не знаете каждую деталь о java? И вы склонны искать решение для спасения вместо того, чтобы рисковать? Звучит разумно. Способность учиться гораздо важнее, чем некоторые детали. Хотя лучшим ответом было бы сказать что-то вроде «Я так не думаю, но я не уверен в этом». По крайней мере, если интервьюер умный. Ошибки случаются, и осознание того, что вы невосприимчивы к ошибкам, важно. В заключение не делайте этого слишком тяжело. – Aziuth