java new一个实例对象,为什么不等于null

我在写注册会员逻辑时。当在注册页面填写用户名liuyifei。发送请求后,去数据库中查询t_user表。如果存在在用户名则返回注册页面;如果不存在,则添加此次注册信息。为... 我在写注册会员逻辑时。 当在注册页面填写用户名liuyifei。 发送请求后,去数据库中查询t_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;
}
展开
 我来答
百度网友fb6971e
推荐于2018-09-25 · TA获得超过343个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:146万
展开全部
因为你事先声明了:User user = new User();
后续无论数据库是否查到数据,返回的都是这个不为null的user啊。
如果要达到期望的结果,可以改写成如下写法即可:

User user = null;
....
rs = prep.executeQuery();
while(rs.next()){
user = new User();
user.setXXX
..
}
return user;
匿名用户
2013-03-18
展开全部
User user = new User();
你是在这儿实例化的,并没有初始化为 null
如果查找不到记录就返回 null 的话,你可以这样
public void findByUsername(String username) throws Exception {
Connection conn = null;
User user = null; // 初始化 user 为null
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();
if (rs.next()) { // 如果返回一条记录,此处不要使用 while
user = new User(); // 如果有返回记录,则初始化 User,并赋值
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 {
}
System.out.print("根据注册的用户名字段,到数据库t_user表中匹配。当该用户名不存在时,检验返回的user是否等于null: ");
System.out.println(user == null);
return user;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
想飞翔的骆驼
2013-03-22 · 超过13用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:12.6万
展开全部
你一开始就User user = new User();
一般我写的时候是不直接new出来的,以免浪费内存,因为你new出对象后,它会存在栈中,等到你方法执行结束后,才会等垃圾回收。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fb6971e
2018-01-31 · TA获得超过343个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:146万
展开全部
因为你事先声明了:User user = new User();
后续无论数据库是否查到数据,返回的都是这个不为null的user啊。
如果要达到期望的结果,可以改写成如下写法即可:

User user = null;
....
rs = prep.executeQuery();
while(rs.next()){
user = new User();
user.setXXX
..
}
return user;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
594214009
2013-03-21 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:119万
展开全部
你先用了User user=new User();这句话会初始化一个user,不论返回的结果是什么,他返回的都是你初始化的那个user。不想这样的话,就把一个user作为参数传进来,而不是你new一个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式