首先Java中.equals()和==的区别我知道,但我一直以为当字符串为空时,.equals("")和==""是一样的,而且在程序中写也一直没发现问题。如下:
String b="";
System.out.println(b.equals(""));
System.out.println(b=="");
这两结果都是true;
但,在页面中,例如提交一个页面http://localhost:7001/wh.do?rylb=
然后在后台:      String b=request.getParameter("rylb");
b=="";
b.equals("");
却一个是false,一个是true;
为什么?

解决方案 »

  1.   

    String b="";
    这种情况,b引用的是字符串常量池里的对象。
    所以b == "" 是true。String b=request.getParameter("rylb");
    得到的是一个新创建的对象,比较引用不相同,正常。
      

  2.   

    个人的简单理解:
    “==”是整个对象都要相等,包括引用
    equals是对象里面的值。等待牛人给个比较理论的解释
      

  3.   

    == 是判断两个对象的内存地址是否相同~~~~  equals("") 是判断两个值是否相等..
      

  4.   

    不可能啊 
    实质上String 中的equals()的代码如下:
     public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
    return false;
    }
    return true;
        }
    }
    return false;
        }
    如果是""的话 str.equals("")也就相当于 str == "";
      

  5.   

    b=="";是值
    .equals("")比对的是指向值的内存地址,也就是对象!
      

  6.   

    ==判断是内存地址equals判断的是实际的值,
      

  7.   

    这段代码怎么又错误啊,提示count,value,offset无法解析。
      

  8.   

    除了1楼,6楼和11楼,大家好像都没明白我的意思,我不是问==和equals的区别,而是问当string为空时,它们的区别,或者是,String a=""和String a=request.getParameter("rylb");这两个空的区别。
      

  9.   

    "" 和" "是String两个不同的对象........
      

  10.   

    第一个就String a="";第二个相当于String a=null;
    因为request.getParameter("rylb")获取不到值,由于你没有传参数
      

  11.   


    通常我都是这样写的..
    if(b == null || ("").equals(b.trim())) {
    ...
    }
      

  12.   

    equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
      

  13.   

    == :比较两个对象的值是否相等 
    equals():比较两个引用对象所指向的内容是否相等
      

  14.   

    我觉得判断空值 "".equals(a) 更好!呵呵!
      

  15.   

    *.eques() 比较两字符串是否相等
    ==  比较地址
    用到  request response 就牵连到作用域  所以是比较地址
      

  16.   

    对引用作 == 运算,比较的是它们的值(也即所指向对象的内存地址);
    aString.equals(s) 本质是调用了一个对象的方法,我们通常在这个方法里加上我们判断两个对象是否"相等"的比较逻辑,比如Account类的equals方法比较的可能是id,Person比较的是身份证号等
      

  17.   

    这种题目就跟C/C++里面比较  i++和++i 一样无聊
      

  18.   

    不知道你有没有查过java api里对String的介绍?String并不是一个普通的类,String a = "";一般这样的写法,只存在一个对象,在String pool里如果request里是new String()的话,那他存在着二个对象和一个引用,你觉得 == 和 equals会相同?如果request也是直接用String a = "";的方式的话,那就相同,虽然我没看过request的实现,但是基本因该是这样
      

  19.   

    再说明白点你String pool里的对象去和引用比较,用==比较内存地址值,可能一样吗?equals只是比较内容,不存在任何问题
      

  20.   

    equals是比较对象的引用,==是比较基本类型,,,
      

  21.   

    ==是比较内存中的地址,也就是比较引用所指向对象的地址。
    equals是String自带的方法,两个字符串比较的是内容,即使不是指向同一个对象但内容一样,即返回true!
      

  22.   

    equal是比较里面的内容
    ==是比较内存的地址是否相同
      

  23.   

    对比一下String b = "";String b = new String("");的区别你会对此题更了解。
      

  24.   

    我记得在sun出版的一本书里说过,版主说的这个情况是:  不一定。具体的我认为:
           String a = new String("");
    当你采用这个方式声明的时候,即便在我们的缓存池里有“”这个字符串了,虚拟机会忽略这个缓存里面的而另外再创建一个
    而你这样声明的时候:
           String a  = "";
    它会首先去虚拟机里面的缓存里去寻找是否已经存在"",如果存在了,虚拟机就直接将引用指向那个已存在的那个“”的地址空间推荐你看一下effective java 这本书,里面似乎有对这个问题的讲解。
      

  25.   


    个人认为楼主用此方法比较两个空字串不妥当,最好先使用String的trim()方法然后再使用equals方法进行比较,其它的 #1 楼已经说得很明白了
      

  26.   

    ==比较引用,equals比较内容;该结贴了!!!!!
      

  27.   

    ==比较的是对象的引用  而equals()比较的是对象内容 但是equals默认比较的是引用  可以看看thinking in java  里面讲的很详细
      

  28.   

    ==比较的是对象的引用,equals比较的是对象的内容