public class ClassMain { 
public static void main(String args[]) { 
/********第一段*******************/ 
ClassE a = new ClassE(); 
ClassE b = new ClassE(); a.i=1; 
b.i=2; 
b=a; 
b.i=3; System.out.println(a.i); /********第二段*******************/ 
ClassE c = new ClassE(); 
ClassMain cm = new ClassMain(); 
c.i=1; 
cm.revalue(c); 
System.out.println(c.i); String s1 = new String(); 
String s2 = new String(); /********第三段*******************/ 
s1="a"; 
s2="b"; 
s1=s2; 
s2="c"; 
System.out.println(s1); } public void revalue(ClassE c) { 
ClassE d = new ClassE(); 
d.i=2; 
c=d; 
d.i=3; 


class ClassE { 
int i=0; 
}代码是从另外一个贴子里拷的.
第一段:  b=a;这句是把b跟a指向了同一个对象.
        b.i=3;是改变了b指向的那个对象的属性(i)的值.也就是,没有新对象产生!
第三段:  s1=s2;同第一段b=a;
        问题在这里:s2="c";这句是相当于重新new了一个对象?  那么s2之前指向的字符串"b"这时候如果没有s1指向的话(这时候s1是指向"b"),这个对象就一直在内存里面??   JAVA的回收机制是在内存不够用的时候才做的,相当于这段内存是随着程序运行一直存在的?另外 第二段中revalue(ClassE c)  方法传的是对象引用的拷贝还是对象所占内存的拷贝(很多我喜欢说JAVA的方法采用的是值传递).个人觉得方法传的是对象 占用内存被拷贝一次.所以方法才不改变传入对象的值!第一次发贴,刚学JAVA没多久.希望指点!

解决方案 »

  1.   

    第二段里的c 和  revalue(ClassE c) 方法里的c   不是同一个变量  或许你把参数换个名字更好理解方法里那个c只是一个副本  两个c都指向同一个对象  但运行到c=d;时里面的c指向了d但外面的c依然还是指向原来自己那个对象的
      

  2.   

    第三段输出bs1="a"; 
    s2="b"; 
    s1=s2;   //这时s1是"b"
    s2="c";   //即使s2已经指向另一个对象了,但s1依然指向"b"垃圾回收这问题   我只知道他不一定什么时候运行  要运行的话  清理的也是那些没有被引用的对象  "b"有他的引用 就是s1
      

  3.   

    http://topic.csdn.net/u/20080716/15/3ccb6f88-4ca8-478e-92dd-f1aa1e16b363.html
      

  4.   

    第一段 ClassE a = new ClassE(); 
    ClassE b = new ClassE(); a.xxxx或b.xxxx  这些操作只是更改上面new出那两块内存区域里的属性所以不存在有没有新对象产生程序改的只是引用
      

  5.   

    这个例子里是有"b"的引用是s1 .
    但是如果把s1也指向另外一个对象呢?  s1="xxx";
    之后呢?  "b"这段内存呢?  谁管?
      

  6.   

    import java.awt.*; public class Test11{ 
    public static void main(String[] agrs){ 
    Frame f = new Frame("My First window"); 
    f.setSize(200, 300); 
    f.setLocation(300, 300); 
    f.setResizable(true); 
    f.setBackground(Color.orange); 
    f.setVisible(true); 


    java.awt.Frame 
    setSize() 
    setVisible() 
    setResizable() 怎么都找不到啊 你们的文档找的到么??java自动设置环境变量
    更多信息请参考java论坛
      

  7.   

    s2="c";这句是相当于重新new了一个对象?答:在JAVA中字符串不仅仅是字符数组,而且是String类的一个实例。