本帖最后由 QustDong 于 2010-05-31 21:36:54 编辑

解决方案 »

  1.   

    在java中
    只有用new关键字才会产生新对象(String特殊除外);这里只有一个new呵呵!其实s2指向的是s1
    相当于
    s2 = s1 = new Student ();所以指向的是同一个对象!
      

  2.   

    学习了.我用Eclipse运行了下 是30哦我开始还以为是 20
      

  3.   

      呵呵,虽然是天天都是面向对象的开发,可真要说个所以然来,还真是很难的。
       JF 升星星啊
      谢谢LZ
      

  4.   

    si,s2引用的的同一个内存空间、、、
      

  5.   

    基本数据类型存储的是实际的数值,所以“=”对基本数据类型赋值是直接将一个地方的内容复制到另一个地方;对对象进行操作时,真正操作的是对对象的引用,“s2=s1”,把s1的引用赋给s2,二者地址相同。
      

  6.   

    谢谢楼主的分享!为了便于更好地理解,我画了每一步的内存结构模拟:Student s1 = new Student();
    +--------+         +---------+
    |   s1   | ------> | Student |
    +--------+         +---------+
                       | age = 0 |
                       +---------+s1.setAge(20);
    +--------+         +----------+
    |   s1   | ------> | Student  |
    +--------+         +----------+
                       | age = 20 |
                       +----------+Student s2 = s1;
    +--------+         +----------+
    |   s1   | ---+--> | Student  |
    +--------+    |    +----------+
                  |    | age = 20 |
                  |    +----------+
    +--------+    |
    |   s2   |----+
    +--------+s1.setAge(30);
    +--------+         +----------+
    |   s1   | ---+--> | Student  |
    +--------+    |    +----------+
                  |    | age = 30 |
                  |    +----------+
    +--------+    |
    |   s2   |----+
    +--------+那可以看出 s2.getAge() 就是 30 了,呵呵 :)
      

  7.   

    刚学java的时候也曾经迷惑过,接分~
      

  8.   

    如果所有的java的试题和问题都是这样,那么作为java程序员真是太幸福了。
      

  9.   

    java中只有值传递,没有引用传递所以虽然运行了 Student s2=s1;实际上只是让 s2指向s1在内存中的地址
      

  10.   

    Student s2=s1;
    让s2引用了和s1同样的内容 所以可以认为s2即s1 一枚硬币的两面嘛接分:-)
      

  11.   

    楼主以前是学c++的吧,java里的对象变量都是引用