2014-02-07 5 views
-2

Я не знаю, что с ним происходит. Код ниже. Я не пытаюсь получить кого закодировать все это для меня, просто не знаю, что случилось, и хотел бы немного помочьПростой ввод пароля для пароля Java не работает

private void javabutton1(java.awt.event.ActionEvent evt) { 
    String testa= new String (jPasswordField2.getPassword()); 
    String testb= new String (jPasswordField3.getPassword()); 
    if (testa.toString() == testb.toString()){ 
     JOptionPane.showMessageDialog(this, "Success"); 
    } 
} 

Когда я заменить testa.toString() == testb.toString ()) с "A" == "A". Доступно сообщение «Успех», но это сравнение записей не будет

Также: текст, введенный как в jPasswordField2, так и в jPasswordField3, одинаковый.

+0

Исправьте отступы :) – Michael

+3

Почему вам нужно конвертировать строки в строки? – StephenTG

+3

Отвечая на этот вопрос здесь, просто поощряет людей к _keep_, задавая одни и те же вопросы снова и снова ... – csmckelvey

ответ

1

Вы должны попробовать:

testa.equals(testb) 

И нет никакого смысла делать это:

String testa = getSomething(); 
String temp = testa.toString(); 
// becasue 
testa.equals(temp) // always true 

Если бы что-то вроде:

String a = getSomething(); 
String b = a; 
a == b // now this is true, because they have the same reference/pointer 
0

В принципе, вы никогда не должны используйте ==, чтобы сравнить строки, вместо этого используйте equals(), так что для вас:

testa.equals(testb)

Разница заключается в том, что == используется для сравнения ссылки, он говорит: «Есть ли эти две ссылки строк указывают на тот же объект Строка в памяти» ... это непредсказуемо из-за того, как Java магазины Строки, что в основном объясняет, почему "A" == "A" возвращает true ... не то, чтобы войти сюда.

Метод equals() больше чем можно было бы ожидать, в Java Class String, этот метод в основном проверяет, является ли или нет каждый символ в строке одно и то же, и возвращает true если они делают.

Если это объект, вы должны использовать equals() для сравнения, если его примитивный тип данных, таких как int (или вы проверяете ли ссылка null), затем используйте ==.

+0

Зачем вызывать 'toString()' в строке? – csmckelvey

+0

Действительно! Даже не видел, что это за объекты. Я отредактирую. – Ben

0

Try с String.equals()

Рассмотрим два различных ссылочные переменные str1 и str2

str1 = new String("abc"); 
str2 = new String("abc"); 

если вы используете equals()

System.out.println((str1.equals(str2))?"TRUE":"FALSE"); 

Вы получите выход в ИСТИНА

если вы используете ==

System.out.println((str1==str2)?"TRUE":"FALSE"); 

Теперь вы получите FALSE в качестве выходного сигнала, потому что оба str1 и str2 указывают на двух различных объектов, даже если оба из них одни и те же содержимое строки. Это происходит из-за new String() каждый раз, когда создается новый объект.

+0

Или вам действительно нравится CAPSLOCK, или вы просто можете использовать: System.out.println (str1 == str2); – martijnn2008

0

устранить проблему с помощью String.equals (строки), как это

String testa= new String (jPasswordField2.getPassword()); 
String testb= new String (jPasswordField3.getPassword()); 
    if (testa.equals(testb)){ 
     JOptionPane.showMessageDialog(this, "Success"); 
    } 
0

Хотя я согласен с Takendarkk, что ответить на повторяющиеся вопросы способствует их повторное объявление, я думаю, что есть по крайней мере один вопрос, который следует отметить, о котором не упоминалось. StephenTG задал острые вопросы в комментариях: «Зачем вам нужно преобразовать свои строки в строки?»

Учитывая имя ваших переменных, если вы действительно используете swing JPasswordField, то метод getPassword() возвращает массив char[]. Вам не нужно преобразовывать это в строку, вы можете сравнить их с помощью java.utils.Arrays#equals(char[]. char[]), чтобы получить желаемый результат. Ваш код может выглядеть следующим образом:

private void javabutton1(java.awt.event.ActionEvent evt) { 
    char[] testa = jPasswordField2.getPassword(); 
    char[] testb = jPasswordField3.getPassword(); 
    if (Arrays.equals(testa, testb)){ 
     JOptionPane.showMessageDialog(this, "Success"); 
    } 
} 
Смежные вопросы