java new一个实例对象,为什么不等于null?
我在写注册会员逻辑时。 当在注册页面填写用户名***。 发送请求后,去数据库中查询user表。
如果存在在用户名则返回注册页面;如果不存在,则添加此次注册信息。为什么数据库中不存在该用户名,返回的user实例不等于null呢。
public User findByUsername(String username) throws Exception
{
Connection conn = null;
User user = new User();
try
{
conn = DBUtil.getConnection();
String sql = "select * from t_user
where username=?";
PreparedStatement prep =
conn.prepareStatement(sql);
prep.setString(1, username);
ResultSet
rs =
prep.executeQuery();
while(rs.next()){
user.setUsername(rs.getString("username"));
user.setName(rs.getString("name"));
user.setPwd(rs.getString("pwd"));
user.setGendar(rs.getString("gendar"));
}
}
catch (Exception e)
{
e.printStackTrace();
}finally{
DBUtil.close(conn);
}
System.out.print("根据注册的用户名字段,到数据库t_user表中匹配。当该用户名不存在时,检验返回的user是否等于null:
");
System.out.println(user==null);
return user;
}
解答:因为你在登录方法中首先实例化了一个User对象:
User user = new User();
后续无论数据库是否查到数据,返回的都是这个不为null的user。
如果要达到期望的结果,可以改写成如下写法即可:
User user = null;
rs = prep.executeQuery();
while(rs.next()){
user = new User();
user.setXXX
}
return user;
注:User user = null与User user = new User():前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。两者存在区别。