2版第3章中有道习题(第6题)
  感觉太难了,所以看了答案:
  答案是:
  public class E06_CompareStrings {
  public static void p(String s, boolean b) {
    System.out.println(s + ": " + b);
  }
  public static void
  compare(String lval, String rval) {
    //! p("lval < rval: " + lval < rval);
    //! p("lval > rval: " + lval > rval);
    //! p("lval <= rval: " + lval <= rval);
    //! p("lval >= rval: " + lval >= rval);
    p("lval == rval", lval == rval);
    p("lval != rval", lval != rval);
    p("lval.equals(rval)", lval.equals(rval));
  }
  public static void main(String[] args) {
    compare("Hello", "Hello");
    String s = new String("Hello");
    compare("Hello", s);
    compare("Hello", "Goodbye");
  }

  感觉答案是挺正确的
  但是运行的时候,为什么函数compare的变量初始化就不行了呢?
  请各位大虾帮助,小弟感激不尽

解决方案 »

  1.   

    ==比较的是内存地址;
    equals比较的是内容。用new创建对象时,都会 新 分配一个内存地址,所以就不等了。用=创建String对象时,是去内存里寻找,看有没有对应的内容,有就指向那里,所以相等。
      

  2.   

    呵呵,是我对问题的描述有问题.
    :)
    我的意思是,程序本身编译没错误,但运行的时候,比如我在最后对compare("hello","hello")进行了赋值,但是实际上程序比较的仍然是compare("lval", "rval")
      

  3.   

    我是初学java,但是我觉得程序执行得没有问题呀?
      

  4.   

    compare("hello","hello")的输出应该是lval == rval:true,比较的是"hello"和"hello"
      

  5.   

    下边是我执行输出的结果:
    //compare("hello","hello")
      lval == rval: true   //这确实返回true了?
      lval != rval: false
      lval.equals(rval): true//String s = new String("Hello");
    //compare("Hello", s);
      lval == rval: false
      lval != rval: true 
      lval.equals(rval): true//compare("Hello", "Goodbye");
      lval == rval: false
      lval != rval: true
      lval.equals(rval): false
      

  6.   

    yeah920的解释正确,==比的是两个字符串的内存地址 equals比的是字符串内存地址上保存的值
      

  7.   

    哦,明白了,虽然输出的是
    lval == rval: true   
    lval != rval: false
    lval.equals(rval): true
    但比较的其实是"hello","hello"
    非常感谢各位的热情帮助!!!
      

  8.   

    hhx420() ( ) 信誉:100    Blog 
    compare("hello","hello")的输出应该是lval == rval:true,比较的是"hello"和"hello"------------------------------------
    == 和 equals 本来是一样的,比较的引用和值!但是一些基本类重写了equals方法,比如String,这样String比较的就是对象的值了,但==比较的仍然是引用!compare("hello","hello")的输出应该是lval == rval:true 这里有点不太明白,在函数p里是定义了2个引用来接受传过去的值的
      

  9.   

    public class E06_CompareStrings {
        public static void p(String s, boolean b) {
          System.out.println(s + ": " + b);
        }
        public static void
        compare(String lval, String rval) {
          //! p("lval < rval: " + lval < rval);
          //! p("lval > rval: " + lval > rval);
          //! p("lval <= rval: " + lval <= rval);
          //! p("lval >= rval: " + lval >= rval);
          p(lval +"==" +rval, lval == rval);
          p(lval +"!=" +rval, lval != rval);
          p(lval+".equals "+rval, lval.equals(rval));
        }
        public static void main(String[] args) {
          compare("Hello", "Hello");
          String s = new String("Hello");
          compare("Hello", s);
          compare("Hello", "Goodbye");
        }
      }
    楼主这个意思吧
      

  10.   

    大部分类的equals方法实际就是调用==的结果,但是一些基本类比如String 类做了一些调整,
    他的equals方法比较的是两个String对象的内容!
    ==的意思是 两个引用完全相同,他们指向了同一个对象
      

  11.   

    domelet123() 这个发广告的应该叫版主把他封了,他妈的每个帖子发一次
      

  12.   

    恩,我想要的程序结果就是zhuyf333()兄弟代码运行出来那样的.
    谢谢!
    :)