比较字符串的值用equals方法== 还比较了两个字符串的地址  这两个字符串地址显然是不同的

解决方案 »

  1.   

    ==比较的是对象的引用(对象的内存地址),equals比较的是值  所以用equals替换==即可
    我是这样理解的
      

  2.   

    == 还比较了两个字符串的物理地址,两个字符串的物理地址有时候一样,有时候不一样,这就要看它是怎么分配的了。
    字符串比较建议用equals()
      

  3.   

    字符串比较用equals(),并且最好把比较的值放前面,防止空指针异常
      

  4.   

    String s="abce"是一种非常特殊的形式,和new 有本质的区别.
     *
     * 它是java中唯一不需要new 就可以产生对象的途径.
     *
     * 以 String s="abce";形式赋值在java中叫直接量,它是在常量池中而不是象new 一样放在压缩堆中.
     * 这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abcd"的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"abcd",下一次如果有String
     * s1 = "abcd";又会将s1指向"abcd"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象.
    public class Test1 {
     public static void main(String[] args) {
      String a = new String("ab"); // a 为一个引用
      String b = new String("ab"); // b为另一个引用,对象的内容一样
      String aa = "ab"; // 放在常量池中
      String bb = "ab"; // 从常量池中查找
      if (aa == bb) // true
       System.out.println("aa==bb");
      if (a == b) // false
       System.out.println("a==b");
      if (a.equals(b)) // true
       System.out.println("aEQb");
      if (42 == 42.0) { // true
       System.out.println("true");
      }
    }
    }
      

  5.   

    你那么测试可以是因为你的map和String字符串存在了同一块内存地址中了,比较起来是一样的。  那你试一下 String str = new String('国内');在这么比较看看应该就不一样了。
      

  6.   

    又是java里的==与equals()的区别问题,==可以用来比较java基本类型(如:int,float,char)的值是否相等,而java中用来比较两个对象(如Integer,Float,String)的内容是否相等要用equals()方法,java中的String也是对象类型,而非基本类型.