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吗?求教。

解决方案 »

  1.   

    req.getParameter("password")是 对象 ,对象和字符串 比较 肯定 false
      

  2.   

    你debug看下这两个参数的具体值
      

  3.   

    字符串也是对象,问题根源在于 equals 对比对象的时候 比较的是 内存的地址,
    resultSet.getString("password")
    req.getParameter("password"))
    位于两个不同的堆内存里
      

  4.   


    字符串比较不是用equals比较内容吗?
    如何得到比较结果为true呢?
      

  5.   

    这个解释似乎有点牵强,楼主把以下代码运行下String a =new String("aaa");
    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));这是本人的一点理解 可能不对,希望对你有所帮助
      

  6.   

    String  str1=resultSet.getString("password");
    String str2=req.getParameter("password"));
    如果上述两种写法不报错的话,那你需要覆盖equals()方法了
      

  7.   

    req.getParameter("password")方法获取的是Object对象,而.equals()方法比较的是2个字符串对象,且父类对象不能直接转换成子类对象,可以用下面的方法试试:
    1、resultSet.getString("password").equals(req.getParameter("password").toString());
    2、resultSet.getString("password").equals((String)req.getParameter("password"))
    而且3楼说的也不对吧?equals()方法比较的是String的内容,“==”才是比较的内存地址。
      

  8.   

    对  我说的是不对。
    ==可用于基本类型和引用类型:
    当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
    在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。
    基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。equals它比较两个对象是否相等。仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
    来源:网络
      

  9.   

    楼主可以试试这个方法 toString一下
      

  10.   

    String a=resultSet.getString("password");
    String b=req.getParameter("password");
    System.out.println(resultSet.getString("password"));
    System.out.println(req.getParameter("password"));
    System.out.println(a.equals(b));
      

  11.   

    req.getParameter("password") 取到的是Object类型 需要(String)req.getParameter("password") 这样强转一下 再比较就是true了
      

  12.   

    那个说的不对。
    如果没有重写父类的equals 那么子类默认调用父类的equals, 父类实现的也是用==比较,两个不同的栈内存地址,所以不相等。
      

  13.   

    req.getParameter就是返回的String,应该不用转换吧,估计楼主你可以用trim去处理一下,或许是有空格,有时看不出来的……
      

  14.   

    System.out.println("--------"+resultSet.getString("password")+"---------");
    System.out.println("--------"+req.getParameter("password")+"--------");
      

  15.   

    1、先确认两次取到的结果都是String类型
    2、保证结果1234中不含首尾空格、换行、、、PS:equals比较两字符串内容是没问题的,req.getParameter()返回的是String类型
      

  16.   

    首先,得弄清"equals"与"=="的区别:
      "equals"操作是指两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
      "=="操作是指比较的两个变量的值是否相等,即栈中的内容是否相同。
    所以,在此例中用"=="返回true,用"equals"返回false
      
      

  17.   

    这个理论上是ture两个都是String的(String也是对象)
    可能细节有问题。1234难道真的是多个空格?
      

  18.   

    上面讨论的req.getParameter和resultSet.getString都是返回String,而不是Object。
      

  19.   

    不好意思req.getParameter("password")方法获取的是Object对象,这里说错了req.getParameter()返回的确实是String.