在struts 中的action类下public ActionForward execute 我写了一个如下的测试代码:
                String userName = loginForm.getUserName();
String password = loginForm.getPassword();
if (userName == "jack")
{
forward = "success";
}
else
{
forward = "fail";
}
       我用watch看了userName 是jack 但是为什么不成立,程序总是运行到else; 如果"=="换成equals就成立,请问为什么?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zhqingren】截止到2008-07-01 16:02:45的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:100                
    结贴数:0                  结贴分:0                  
    未结数:1                  未结分:100                
    结贴率:0.00  %            结分率:0.00  %            
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    username是对象,所以只能用equals来比较是否相等。
    ==是比较两个变量,比如int a = 1;int b = 1;则a == b就为true。
      

  3.   

    ==比较值EQUES比较对像.字符串是对像.当然要用EQUES
      

  4.   

    比较一般彩用str1.equals(str2)
    返回true表示相等,false为不等
      

  5.   

    字符串不能用等号,要用equals
    if (userName.trim().equals("jack"))  
      

  6.   

    eqauls判断的是对象里的值是否相等,而==是判断对象的句柄是否相同,每个对象的句柄是不同的。所以你那样比较是永远不会成立的,你的用户名是通过文本框来输入的,所以应该比较值,用eqauls。
    这个就是eqauls和==的区别,一般在公司笔试的时候会经常考到这个问题,在2005年金山软件的一道考题就是考的这个。呵呵,Java真奇妙
      

  7.   

    equals 只是比较值是否相同 
    而==则是比较两个变量 是不是同一个变量,也应时是说 
    要看看这两个变量是不是引用的同一个地址, 
    java 中只有引用地址相同的两个变量才被视为== 
      

  8.   

    java基础以前我也碰到过这个问题
      

  9.   

    这个java基础问题,有空看看这方面的资料,像thinkinjava之类的,好好补补!
      

  10.   

    == 比较地址
    equals 比较值
      

  11.   

    == 是两个字符串内存的地址的比较
    equals 才是内容的比较
    应该用equals才对
      

  12.   

    java里面的 "=="号的意思是:
    1.如果比较的是两个基本类型(char,byte,short,int,long,float,double,boolean),则是判断它们的值是否相等。 
    2.如果表较的是两个对象变量,则是判断它们的引用是否指向同一个对象。 
    你这里比较的是两个对象,当然结果是false了 :)
      

  13.   

    String 是很特殊的对象,所以人们觉得自己对它很熟悉,但有时候会觉得好陌生。
    所以在这里是不能用 ==
    要用 equals 去比较