n简单的问题,怎么不相等哪?(jsp)

qdlover 2002-03-08 04:56:24
url是http://localhost:8080/my/info/sysadmin/post.jsp?action=login
代码
String action=request.getParameter("action");
//登录处理过程
out.println(action);
out.println(action.length());
out.println((action=="login"));
结果
login 5 false
怎么会是false?
...全文
2 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hairinwind 2002-03-08
也许我没有说明白

String 是 Object
所以,如果
String a="login"; //系统new 了一个Object
String b="login"; //系统又 new 了一个Object,这时候有两个 Object
System.out.println(a==b); // 结果是 false
System.out.println(a.equals(b)); //结果是 true

如果
String a="login"; //系统new 了一个Object
String b=a; // 这个时候,系统并没有 new 一个新的 String, a,b指向同一个Object
System.out.println(a==b); // 结果是 true
System.out.println(a.equals(b)); //结果是 true

你的程序
out.println((action=="login"));
其实等号右边 "login",系统又new 了一个Object,所以是两个对象,所以用==比较当然是false

建议,看 scjp 的考试书,这方面的基础知识说的很好

如果我错了,请指正,不想误人子弟,同时对我也是提高

回复
zlq 2002-03-08
equals 和 equalsIgornCase 是比较字符串的.
== <=这是比较对象的.
看懂如下程序你就明白了.
class Test2
{
public static void main(String[] args)
{
if(new String("ABC") == new String("ABC"))
{
System.out.println ("true");
}else
{
System.out.println ("false");
}

if("ABC" == "ABC")
{
System.out.println ("true");
}else
{
System.out.println ("false");
}
}
}












结果:
false.
true.
回复
cosmo 2002-03-08
action=="login"

action is a reference to a block of memory. You may think that it is an address like ( 0x0AB.... ). "login" is another block of memory with address different from (0x0AB...), eg.(0x0BB...). == just compare the two addresses. The result is false.

To check if action is "login", use action.equals("login"). don't use == to compare Objects.
回复
GJA106 2002-03-08
在java中比较两个字符串用equalsIgnore或equalsIgnoreCase才能得到正确结果,而不是用==。
回复
qdlover 2002-03-08
谢谢各位,我才开始学,不明白,还以为和javascript一样那,各位见笑了,送分
回复
qdlover 2002-03-08
是不是变量和字符串比较不能用==,谢谢,现在可以了
回复
ygd 2002-03-08
((action=="login"));
逻辑表达式,只有 TRUE 和FALSE

回复
hairinwind 2002-03-08
呵呵,String 是 Object ,所以比较要用 equals

int比较相等就可以用 ==

但是 Integer 就需要用equals,因为Integer是 Object
回复
David017 2002-03-08
用equals是比较值,就会得到你想要的结果了。
回复
David017 2002-03-08
action.equals("login")
这个大小写敏感
如果忽略大小写
action.equalsIgnoreCase("login")

action 和 "aciton"是两个不同的类
所以不等。
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告