String st1 = "abcde";    //生成对象,存入常量池 
String st2 = "abcde";    //从常量池取出所以是同一个对象,所以==用new就是新建对象,所以不等

解决方案 »

  1.   

    String st1 = "abcde"; 
    String st2 = "abcde"; 
    st1和st2指向同一内存区"abcde",String st1 = new String("abcde");
    String st2 = new String("abcde");
    他们要先建立String对象"abcde" 然后赋给st1;
    再建立String对象"abcde" 然后赋给st2;
      

  2.   

    1、编译器对所有 String s = "a string" 初始化的字串建立一个表,它不包括用 new String() 在堆中创建的字串,然后查询字串表,看是不是已经存在有一个值为"a string"的字串.如果存在, s 将取得此引用,如果不存在, 建立新的字串, 并注册到表中, 返回引用给s.所以(st1 == st2) = true.
    2、Object类的equals()方法比较的是两个对象的引用,当且仅当两个引用指向同一内存地址时,equals()的返回值为true.但String类覆盖了Object类的equals()方法,只对内容进行比较,不对内存地址进行比较.