Java web项目登录模块方法中实例化一个对象,为什么不为null?

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并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。两者存在区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值