日期:2014-05-20  浏览次数:20657 次

求助:JAVA编程思想的一道习题
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的变量初始化就不行了呢?
    请各位大虾帮助,小弟感激不尽


------解决方案--------------------
==比较的是内存地址;
equals比较的是内容。

用new创建对象时,都会 新 分配一个内存地址,所以就不等了。

用=创建String对象时,是去内存里寻找,看有没有对应的内容,有就指向那里,所以相等。


------解决方案--------------------
我是初学java,但是我觉得程序执行得没有问题呀?
------解决方案--------------------
compare( "hello ", "hello ")的输出应该是lval == rval:true,比较的是 "hello "和 "hello "

------解决方案--------------------
yeah920的解释正确,==比的是两个字符串的内存地址 equals比的是字符串内存地址上保存的值
------解决方案--------------------
hhx420() ( ) 信誉:100 Blog
compare( "hello ", "hello ")的输出应该是lval == rval:true,比较的是 "hello "和 "hello "

------------------------------------
== 和 equals 本来是一样的,比较的引用和值!但是一些基本类重写了equals方法,比如String,这样String比较的就是对象的值了,但==比较的仍然是引用!

compare( "hello ", "hello ")的输出应该是lval == rval:true 这里有点不太明白,在函数p里是定义了2个引用来接受传过去的值的
------解决方案--------------------
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);