В методе jButton1ActionPerformed
вы хотите проверить, совпадают ли содержимое двух строковых переменных search
и code
, а не совпадают ли их места в памяти.
Помнитечто Java работает с переменными, которые содержат ссылки на память, если эта переменная содержит ссылочный объект (а экземпляр класса String
является ссылочным объектом).Переменные такого типа называются указателями в таких языках, как C, содержимое указателя является адресом памяти.В Java ссылочные переменные не работают для программиста так же, как указатели в C, но за кулисами они точно такие же.Почти все переменные в Java содержат ссылки на память, а не только примитивные типы (примеры примитивных типов: char, int, double, float и т. Д.).
Почему это важно, спросите вы?Хорошо, если вы используете оператор == для ссылочных объектов, вы не проверяете, является ли содержимое двух строк одинаковым, но вы проверяете, является ли ссылка на оба объекта одинаковой.И это принципиально разные сравнения.
Если вы не хотите проверять, имеют ли две строки одинаковое содержимое, вам нужно использовать метод equals(String)
, который является членом класса String и который сравнивает содержимоедва String-объекта (и это именно то, что мы хотим).
Теперь, зная все это, не удивительно, что строку
if (search == code) {
следует заменить на
if (search.equals(code)) { // which is equivalent to if (code.equals(search)) {
Если вы хотите узнать больше об указателях (ссылках на память), я настоятельно рекомендую вам сделать это, изучив его, например, прочитав некоторую документацию о языке программирования C.
Youможет также не захотеть больше читать о методе equals класса Object, который переопределяется в классе String.