是运算符的顺序导致的吧,先将前两个对象相加在和str2比较。。

解决方案 »

  1.   

            String str1 = new String("liunim");
            String str2 = str1;
            System.out.println("str1 == str2: "+ (str1 == str2));这样就true了,不加括号的话,因为前面引号里面的也是String,所以会跟str1加起来再跟str2比较哦~
      

  2.   

    同意楼上两位的说法。看来楼主刚学java的娃。建议没事翻翻源码多看看里面的比较方法还有==
      

  3.   

    优先级问题,ls都已经说了
    System.out.println("str1 == str2:"+ str1==str2);
    等价于
    System.out.println(("str1 == str2:"+ str1)==str2);
      

  4.   

    字符串间的比较肯定是使用equals()来比较的。
    用“==”来判断字符串变量是否相等时,它是通过判断两个变量的标识(也就是id号)来决定的,即如果a和b同时指向的是内存中的同一个对象,那么他们的id号是相同的,内容当然也是相同的,而我们这里要判断的是两个不同对象中的字符串内容是否相等,很明显,是不同的对象,那么,用“==”来判断的话,结果肯定都是false了
      

  5.   


    我亲自编译测试了一下,你说的也许有道理,但是楼主的这个问题应该是运算符优先级的问题。我使用 System.out.println("str1==str2:"+str1==str2) 的时候输出为 false ,当我使用 System.out.println("str1==str2:"+(str1==str2)) 的时候输出为 true。
      

  6.   

    自己测试时都试一下,== 是指向内存的,Str2 与 str1 所指的内存不同,所以不相等
      

  7.   

    说来说去还是没个确定的,其实这两种答案的结果都能显示true但到底是优先级问题还是equals()问题啊……
      

  8.   


    这个问题已经是两年前的问题啦 ,当时楼主提问以后也就没来怎么看了。还是做个小结吧。
     String str1 = new String("liunim");
      String str2 = str1;
      System.out.println("str1 == str2: "+ str1 == str2);首先:
    执行结果为false的原因确实是因为运算符的优先级问题,“+”的优先级高于“==”于是打印语句等价于
    System.out.println(("str1 == str2: "+ str1) == str2);再来看“==”操作符,java中的引用类型的“==”操作符运算结果为true的定义是:如果操作数的值都为null或者都引用同一个对象
    或者数组的话,那么“==”操作的结果为“true”;
    很明显("str1 == str2: "+ str1) 这个表达式的结果是生成了一个新的字符串对象,他在内存中位置跟str2肯定不是同一个位置,因此("str1 == str2: "+ str1) == str2 的结果为false是肯定的。再来说说equals方法,equals方法是Object类中的方法,任何的类都可以重写这个方法。String类也对这个方法进行了重写,String对equals的定义是:
     public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String) anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                                return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }
    这是String的equals方法,内容很简单:1.如果两个String应用同一个String对象,equals方法返回true;2.两个String引用即使不是引用同一个String对象,如果两个字符串内的字符序列相等话,equals也返回true。引用类型的 “==”操作是比较两个引用变量是否指向同一个对象;.equals方法则是不同的类根据自身条件定义的一个相等的准则。对于中国公民来说如果身份证号一模一样我们就认为这是同一个人。