问题一:Java有垃圾回收机制,可以处理内存泄露的问题,并且程序员也不能强制干涉垃圾回收。
        为什么在很多的面试考题中,还要考察这个知识,对工作有什么意义?
问题二:public class Test{

public static void main(String arg[])
{
Test test =new Test();
int i=0;
test.fermin(i);  
System.out.println(i);
}
int fermin(int i)
{
 i++;  
}
}
 
为什么结果是:0
调用函数没起作用吗?

解决方案 »

  1.   

    还是参数传递的问题,
    你把i传进去,里面的i的值变化了,但是回到主函数,i的值还是没有变化。
      

  2.   


    public static void main(String arg[]) 

    Test test =new Test(); 
    int i=0; 
    test.fermin(i); //但是这个i还是0
    System.out.println(i); 

    int fermin(int m) 

    m++;   //m = 1;

      

  3.   


    public class Test { public static void main(String arg[]) {
    Test test = new Test();
    int i = 0;
    test.fermin(i);
    System.out.println(i);
    } int fermin(int i) {
    return i++; //应该添加return。
    }
    }调用已经起作用了。但是你的是值类型的传递,所以改变不了,如果是引用类型的传递才可以改变它本身的值。
    参考:http://lshy168.qupan.com
      

  4.   

    首先即使有垃圾回收,并不能避免内存泄露,如下面的代码:
    public static void main(String arg[]) 

       List<String> strs = new ArrayList<String>();
       for(int i = 0; i < 100000; ++i)
         strs.add(String.valueOf("Index:" + i));
       
       doSomething(strs);   doSomething1();
       doSomething2();
    } 中strs在整个程序存续期间不会被收集,而其占用了大量的内存,可以认为是一个内存泄露,要想让垃圾收集能够自动释放其占用的内存,必须显示的设置strs引用等于null:
    public static void main(String arg[]) 

       List<String> strs = new ArrayList<String>();
       for(int i = 0; i < 100000; ++i)
         strs.add(String.valueOf("Index:" + i));   doSomething(strs);
       strs = null;  // 显式释放   doSomething1();
       doSomething2();
    }类似的问题还有很多,搂住可以自己搜索“java 内存泄露”察看 
      

  5.   

    6楼你那是内存溢出吧喵~```
     java的泄露还是很少见的
      

  6.   

    你说的不对, 即使你传递String 或者Integer进去也不可能改变的。
    想改变只能传递一个带有设值方法的对象。只能改变引用体的“内容”而不可能改变引用体本身。
    说到底传递的是引用, 如果你改变了方法内的引用, 跟外面的也无关。比较好理解的是, 一个一般函数 void func(Object param) {}
    如果我们翻译成 void func() {
        Object arg = param;
        arg = new Object();
    }就比较容易明白了。
    改变arg的引用, 对param本身没有任何影响。param是外部传入的东西, 而函数本身的参数相当于定义了一个函数内部的引用, 指向了外界的一个地址, 改变内部引用的指向不会改变外部地址本身。
      

  7.   

    你把i传进去,里面的i的值变化了,但是回到主函数,i的值还是没有变化。 
      

  8.   

    int fermin(int i) 

    i++; 
    } 参数的局部变量i覆盖了类的属性i!