Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么equals函数不起作用?_Java_Equals - Fatal编程技术网

Java 为什么equals函数不起作用?

Java 为什么equals函数不起作用?,java,equals,Java,Equals,当我编译下面的代码时,它显示(字符串)username和myList.get(0)等于,但是equals函数返回false为什么密码也会发生同样的情况 btnLogIn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String Username=(String) textField.getText(); //fatch the user name

当我编译下面的代码时,它显示(字符串)username和myList.get(0)等于,但是equals函数返回false为什么密码也会发生同样的情况

btnLogIn.addActionListener(new ActionListener()
 {
   public void actionPerformed(ActionEvent e) {

    String Username=(String) textField.getText();   //fatch the user name from text field
    String Password=(String) textField_1.getText();  //fatch password frof text field
    databaseconnection connect = new databaseconnection(); // databaseconnection class object to connect to data base
    ArrayList myList = connect.search(Username,Password);  //serch the username and password in data base
            System.out.println((String)myList.get(0));  //for testing 
            System.out.println((String)myList.get(1));  //for testing
            System.out.println(Username);               //for testing
            System.out.println(Password);               //for testing
            System.out.println(Username.equals(myList.get(0)));  //for testing 
            System.out.println(Password.equals((String)myList.get(1)));   //for testing
            if(Username.equals(myList.get(0))&&Password.equals((String)myList.get(1))){
            System.out.println("Hello"+Username);
            }
        }
    });

这是我的数据库连接类

   import java.sql.*;
   import java.util.ArrayList; 

 public class databaseconnection{
Statement stmt  ;
ResultSet rs ;
Connection conn;
ArrayList<String> temp = new ArrayList<String>();

public void getconnection(){

try{


    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    Connection conn = DriverManager.getConnection("jdbc:odbc:Database1","","");

    stmt = conn.createStatement();


}
catch(Exception e){
    System.out.println("connection error");
}
}
public ArrayList  search(String Username,String Password){

    getconnection();
    try{
    rs = stmt.executeQuery("select username,password from login where username = \'"+Username+"\'");
    if(rs.next()){
    String tempString=rs.getString("username");
    temp.add(tempString);
    tempString= rs.getString("password");
    temp.add(tempString);
    }
    }
    catch(Exception e){
    System.out.println("search error");
    }
    return temp;
  }

  }
import java.sql.*;
导入java.util.ArrayList;
公共类数据库连接{
报表stmt;
结果集rs;
连接接头;
ArrayList temp=新的ArrayList();
公共连接()无效{
试一试{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Connection conn=DriverManager.getConnection(“jdbc:odbc:Database1”,“”,“”);
stmt=conn.createStatement();
}
捕获(例外e){
System.out.println(“连接错误”);
}
}
公共ArrayList搜索(字符串用户名、字符串密码){
getconnection();
试一试{
rs=stmt.executeQuery(“从登录名中选择用户名、密码,其中用户名=\'”+username+“\”);
如果(rs.next()){
String tempString=rs.getString(“用户名”);
临时添加(临时字符串);
tempString=rs.getString(“密码”);
临时添加(临时字符串);
}
}
捕获(例外e){
System.out.println(“搜索错误”);
}
返回温度;
}
}

将myList定义为type
ArrayList
我将您的代码改写为:

String Username = "user";
String Password = "pass";

List<String> myList = new ArrayList<>(); 
myList.add("user");
myList.add("pass");

System.out.println(Username);
System.out.println(Password);
System.out.println(myList.get(0));
System.out.println(myList.get(1));
System.out.println(Username.equals(myList.get(0)));
System.out.println(Password.equals(myList.get(1)));

if (Username.equals(myList.get(0)) && Password.equals(myList.get(1))) {
    System.out.println("Hello, " + Username);
}
它仍然不是完美的,因为
search()
方法应该返回类型为
UserCredentials
的实例或
List
的实例,具体取决于它应该做什么<代码>用户凭据将如下所示:

public void actionPerformed(ActionEvent e) {
    String username = "user";
    String password = "pass";

    List<String> dtbSearchResults;
    try (DatabaseConnection connection = new DatabaseConnection()) {
        dtbSearchResults = connection.search(username, password); 
    } catch (SomeExceptionYouReallyShouldHandle e) {
        // seriously, handle it here
    }

    System.out.println(username);
    System.out.println(password);
    System.out.println(dtbSearchResults.get(0));
    System.out.println(dtbSearchResults.get(1));
    System.out.println(username.equals(dtbSearchResults.get(0)));
    System.out.println(password.equals(dtbSearchResults.get(1)));

    if (username.equals(dtbSearchResults.get(0)) && password.equals(dtbSearchResults.get(1))) {
        System.out.println("Hello, " + username);
    }
}
public class UserCredentials {

    private final String username;
    private final String password;

    public UserCredentials(String username, String password) {
        // maybe some validity checks
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

}
实现该类后,代码将如下所示(假设
search()
只返回一个结果):


如果您还有其他问题,请询问。

这里或那里可能有演员,但您是卡斯图拉伯爵。打破这个习惯…我试过了,但结果是萨梅特不会改变结果。为什么列表没有参数化?@Rob+1代表“Count Castula”,我在那个(有效的)技术点上大声笑了出来。试着用引号括住打印输出,以确保没有尾随空格,例如:System.out.println(“\”“+Username+“\”“”)(顺便说一句,变量的名称很糟糕)。如果存在无法打印的字符,您也可以打印长度。@RavikumArmity,当您在声明列表中只能放置
字符串类型的对象后添加
。使用此方法意味着您不必到处使用强制类型转换。您也不必担心将所有的equals比较作为目标。您的搜索方法返回的类型是什么?我建议您看看java泛型教程好吗?@ravikumarmitry查找
connect.search()
方法,并将其返回类型更改为ArrayListUsername是
字符串。对原始类型列表的get调用返回一个
对象
。因此,将一个对象和一个字符串兼容,这将是不相等的。按照PoiXen的说法设置列表的类型将有助于在字符串类型的临时变量中输入值<代码>字符串tmpUser=myList.get(0.toString();tmpUser.equals(用户名)@RavikumArmitry尝试解决您的新问题一段时间,如果您不成功,则开始新的问题。编译器将显示未选中或不安全的警告operation@RaviKumarMistry在哪一条线上,在哪里?我打赌问题在于
search()
方法的声明。将其返回类型更改为
List
,并将其周围的代码更改为支持该类型。如果您无法做到这一点,请编辑您的问题并添加您的
search()
方法。@ravikumanistry正是我所说的。更改为
public ArrayList search(字符串用户名、字符串密码){}
public List search(字符串用户名、字符串密码){}
public void actionPerformed(ActionEvent e) {
    String username = "user";
    String password = "pass";

    UserCredentials user;
    try (DatabaseConnection connection = new DatabaseConnection()) {
        user = connection.search(username, password); 
    } catch (SomeExceptionYouReallyShouldHandle e) {
        // seriously, handle it here
    }

    System.out.println(username);
    System.out.println(password);
    System.out.println(user.getUsername());
    System.out.println(user.getPassword());
    System.out.println(username.equals(user.getUsername()));
    System.out.println(password.equals(user.getPassword()));

    if (username.equals(user.getUsername())
            && password.equals(user.getPassword())) {
        System.out.println("Hello, " + username);
    }
}