"=="与equals()的区别中r22和r32为什么会和别的答案不一样?

解决方案 »

  1.   

    Takecare是哪一个类?在同一个包中么?
      

  2.   

    equals方法检查两个字符串的内容是否相等,比如:
    String str1 = new String("AAA");
    String str2 = str1;
    那么str1.equals("AAA")和str1.equals(str2)肯定返回true
    因此你的例子中,声明的所有的对象内容都是"china"故而,返回均true。而==运算符比较两个对象是否引用相同的实例;比如你的例子中:
    Strint s1="china";
    s1引用了一段静态内存,其中存储的信息是"china",而:
    Strint s3=new String("china");
    为s3在堆栈中声明了一个字符串对象;
    二者显然引用的不是同一个对象,因此
    s1==s3肯定返回false楼主明白了?
      

  3.   

    至于这个:
    float c=tc.a+b;           //这句话不明白,为什么能够访问a,a怎么能加b为什么不能够访问a,a为什么不能加b呢?
      

  4.   

    a.equals(b);指a和b的值相等,若是字符串就是字符串的内容相同。是两个对象的所有属性相同
    而a==b说明a和b指向同一个对象,即指向同一块内存地址。
    boolean r11=s1.equals(s2);//输出 r11 true
    boolean r12=s1==s2;       //r12 true
    在这里把s1和s2共享一个字符串chinag来节省内存
    而s3则系统重新分配了内存给s3所以s3!s1
    上面说的不一定完全准确,不过大致意思就是这样的,楼主可以参考《java pitfalls》
      

  5.   

    回——————至于这个:float c=tc.a+b; //这句话不明白,为什么能够访问a,a怎么能加b
    为什么不能够访问a,a为什么不能加b呢?
               很简单,因为a不是你在main方法中申明的,同时a是属于对象的,所以你不能在main中直接引用非静态的变量和方法,只能通过对象来引用,至于b为什么可以用,我相信不用我来说啦!
              ==和equals在字符串的比较和对象的比较时,有所不对!比较字符串是还要注意java中的一个字符串池的概念,和实例化的过程不一样!  在java VM过通过你实例化赋值的方法不对,会对不同的字符串对象做不同的存贮!
              我相信你经过上面的一段程序应该已有所了解啦!
                     多看书,分析程序!你的水平会越来越好的!
      

  6.   

    ==是比较地址
    boolean r22=s1==s3;
    boolean r32=s1==s4; 
    s1和s3,s4在内存中分配的地址都不相同
      

  7.   

    谢谢大家
     tanzheng617(追梦人)中所说的
    "因为a不是你在main方法中申明的,同时a是属于对象的,所以你不能在main中直接引用非静态的变量和方法,只能通过对象来引用"
    那你这句话,我是不是可以引申为,如果a是static的话,那就能直接引用了。可以不通过对象了。不知我这样说对吧。
    还有就是a,b类型不同能够相加,那我程序写成
    public class Takecare
    {  static int a=90;
     static float b=10.78f;
     public static void main(String args[])
    {
      float c=a+b;
      System.out.println("c="+c);
    }

    }不再申明一个对象,不是程序更简洁吗。
      

  8.   

    如果全用表态的,那就会造成你内存的开销增大!
      这就是时间(运行时间)和空间(内存的占用)以及数据的封装(如果不是private类型)啦!  这个不是几句话可以说得清的!