错在哪里_jsp中字符型强制转换与比较

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:30:41
<%System.out.print(session.getAttribute("userid"));%> 输出的结果是:admin
<% if(session.getAttribute("userid") == "admin"){ %> 为什么这里的条件判断结果为 错 呢?
<% if((String)session.getAttribute("userid") == "admin"){ %> 判断结果也是 错
是转换错误还是比较方法不对?怎么改?谢谢!
问题已经解决:
使用:session.getAttribute("userid").equals("admin")即可。

如果有高手能说一下上面为什么错了,它们的区别在哪里,那就更谢谢了!

简单的说吧:
==是标准运算符,可以用于比较二个基本类型的值是否相等,也可以用于比较二个引用是否指向同一个对象。显然:session.getAttribute("userid")和"admin"不是指向同一个对象;
equals判断两个对象内容是否一样,也就是值是否相等.因为session.getAttribute("userid")的值是"admin",所以也就equals "admin"了.
你暂且可以这么理解,具体的你可以参考书上的介绍,比如:

引think in java
1. 检查对象是否相等
关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子:

//: Equivalence.java

public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
} ///:~

其中,表达式System.out.println(n1 == n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定先是true,再是false,因为两个Integer对象都是相同的。但尽管对象的内容相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false,再是tru