Tomcat项目下Servlet的代码:
System.out.println(resultSet.getString("password"));
System.out.println(req.getParameter("password"));
System.out.println(resultSet.getString("password").equals(req.getParameter("password")));
上面代码的打印结果是:
1234
1234
false不应该是true吗?求教。
System.out.println(resultSet.getString("password"));
System.out.println(req.getParameter("password"));
System.out.println(resultSet.getString("password").equals(req.getParameter("password")));
上面代码的打印结果是:
1234
1234
false不应该是true吗?求教。
解决方案 »
- 关于hibernate的annotation
- java servlet传输数组
- <%@和 <%区别
- 我供分,大家学习java的spring技术
- resin里面怎么配置,才能进行域名绑定?
- 在下紧急求救,请高手帮忙,在线通宵等
- 谁能解决这两个问题马上给100分!
- 不是吧,Jbuilder里面居然没有timer控件??
- session的值不为空,但是部分属性值为空,求大神解惑
- 一直提示这个!Usage: java javassist.tools.web.Webserver <port number>
- ibm websphere portal server怎么安装
- Struts2迭代问题和sql语句
resultSet.getString("password")
req.getParameter("password"))
位于两个不同的堆内存里
字符串比较不是用equals比较内容吗?
如何得到比较结果为true呢?
String b= new String("aaa");
//a与b是不同的对象的引用 false
System.out.println(a==b);
//a与b 都指向同一块存放aaa的地址 true
System.out.println(a.equals(b));
String c = "bbbb";
String d = "bbbb";
//c,d 是常量 保存在堆栈 ,(static 修饰保存在静态存储区,final static保存在寄存器) true
System.out.println(c==d);
//c,d 是常量,不是对象 equals比较同== true
System.out.println(c.equals(d));这是本人的一点理解 可能不对,希望对你有所帮助
String str2=req.getParameter("password"));
如果上述两种写法不报错的话,那你需要覆盖equals()方法了
1、resultSet.getString("password").equals(req.getParameter("password").toString());
2、resultSet.getString("password").equals((String)req.getParameter("password"))
而且3楼说的也不对吧?equals()方法比较的是String的内容,“==”才是比较的内存地址。
==可用于基本类型和引用类型:
当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。
基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。equals它比较两个对象是否相等。仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
来源:网络
String b=req.getParameter("password");
System.out.println(resultSet.getString("password"));
System.out.println(req.getParameter("password"));
System.out.println(a.equals(b));
如果没有重写父类的equals 那么子类默认调用父类的equals, 父类实现的也是用==比较,两个不同的栈内存地址,所以不相等。
System.out.println("--------"+req.getParameter("password")+"--------");
2、保证结果1234中不含首尾空格、换行、、、PS:equals比较两字符串内容是没问题的,req.getParameter()返回的是String类型
"equals"操作是指两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
"=="操作是指比较的两个变量的值是否相等,即栈中的内容是否相同。
所以,在此例中用"=="返回true,用"equals"返回false
可能细节有问题。1234难道真的是多个空格?