写了一个Java小程序,但是业务逻辑上出现了一些问题。具体的问题是当输入正确的密码与账号时依旧显示密码或者账号错误。经过csdn上的大神指点,查了一下==与equals的区别,并写了一个测试小程序,发现似乎确实是用错了==,而应该是equals。
==与equals的区别为:
==用于比较基本类型,比如int,double等类型,是从内存的栈中取出其位置来比较,比较的是其在栈中的位置。==是对内存的操作。
equals用于比较对象,比如String类型的对象,是从堆中取其值来比较其大小。
==与equals的区别为:
==用于比较基本类型,比如int,double等类型,是从内存的栈中取出其位置来比较,比较的是其在栈中的位置。==是对内存的操作。
equals用于比较对象,比如String类型的对象,是从堆中取其值来比较其大小。
比如说textfield1.getText()==textfield2.getText(),结果为false。但是改为textfield1.getText.equals(textfield2.getText()),则结果为true。
注意,该用equals的地方用了==,会造成很大的问题。
代码如下:
public void actionPerformed(ActionEvent e)
{
boolean idexist=true;
String sql="select * from INFORMATIONOFUSER";
String dbdriver="oracle.jdbc.driver.OracleDriver";
String dburl="jdbc:oracle:thin:@localhost:1521:orcl";
String dbuser="scott";
String dbpassword="123456";
String passwordofuser="";
Connection dataconnection=null;
Statement statement=null;
ResultSet resultset=null;
try {
Class.forName(dbdriver);
dataconnection=DriverManager.getConnection(dburl, dbuser, dbpassword);
statement=dataconnection.createStatement();
resultset=statement.executeQuery(sql);
while(resultset.next())
{
if(resultset.getString(1).equals(idtextfield.getText()))//can't use ==
{
idexist=true;
passwordofuser=resultset.getString(2);
break;
}
}
if((idexist==true)&&(passwordtextfield.getText().equals(passwordofuser)))
{
functionclass.setVisible(true);
}
else
{
JOptionPane.showMessageDialog(this,"账号或者密码错误");
}
}
catch (ClassNotFoundException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
catch (SQLException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
finally
{
try
{
resultset.close();
statement.close();
dataconnection.close();
}
catch (SQLException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
}
}