问题一: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
调用函数没起作用吗?
为什么在很多的面试考题中,还要考察这个知识,对工作有什么意义?
问题二: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
调用函数没起作用吗?
解决方案 »
- java 没有引用传参很不方便
- 代码检查工具
- 哪位兄弟有fileupload组件 commons-fileupload-1.1-dev.jar,commons-io-1.1-dev.jar, 麻烦发一份给我,马上结
- 求算法一种
- List中的Map如何按照一定的规则重新排序
- java怎样格式化一个unix时间戳
- 请教多线程中的yield()方法和notity()方法?在线等~!~1
- 心情极其不爽,散分了,开心一下
- java实现带界面的计算器小程序遇到的问题
- while循环后的语句为什麼执行不了,就是那句 System.out.println(sb);
- 用interrupt()终止线程
- 多线程编压缩程序,分割压缩
你把i传进去,里面的i的值变化了,但是回到主函数,i的值还是没有变化。
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;
}
}
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
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 内存泄露”察看
java的泄露还是很少见的
想改变只能传递一个带有设值方法的对象。只能改变引用体的“内容”而不可能改变引用体本身。
说到底传递的是引用, 如果你改变了方法内的引用, 跟外面的也无关。比较好理解的是, 一个一般函数 void func(Object param) {}
如果我们翻译成 void func() {
Object arg = param;
arg = new Object();
}就比较容易明白了。
改变arg的引用, 对param本身没有任何影响。param是外部传入的东西, 而函数本身的参数相当于定义了一个函数内部的引用, 指向了外界的一个地址, 改变内部引用的指向不会改变外部地址本身。
{
i++;
} 参数的局部变量i覆盖了类的属性i!