易截截图软件、单文件、免安装、纯绿色、仅160KB

关于Java函数调用的一点体会

首先请大家看看下面两段代码有什么区别:
代码1:
List<Task> tasks = new ArrayList<Task>();
Task[] allTask = DemoData.getTasksData();
 for(int i=0;i<allTask.length;i++){
        tasks.add(allTask[i]);
 }
--------------------------------------------------
代码2:
List<Task> tasks = new ArrayList<Task>();
for(int i=0;i<DemoData.getTasksData().length;i++){
        tasks.add(DemoData.getTasksData()[i]);
 }
-------------------------------------------------
从上面的代码可以看出,两种处理方法的不同主要体现在:一个是使用临时变量存储函数返回的结果,而另一个是直接使用函数调用的返回值
那么它们之间有什么区别呢?
原来,对于第一种方法,函数只调用了一次,而第二种方法调用了多次,采用第二种方法的人貌似是想节省一些“不必要的”变量以节省空间并使代码更简洁,其实适得其反,因为每次函数调用都会返回一个“临时变量”,而且如果DemoData.getTasksData()有大量的内存操作,那么这种开销是相当巨大的。
如果对内存要求不高,一般不会发现问题,但是如果DemoData.getTasksData()中有对内存进行的操作,特别是建立对象的操作,而对象间又存在一些依赖或关联关系,则第二种方法由于每循环一次都会调用DemoData.getTasksData()一次,因此对象间建立的关系并没有建立起来,tasks每次add的都是另一个版本的tasks data中的一个task,那次以后在使用tasks的时候就会出现问题:要么一个task的前置任务task找不到,要么为null,找不到是因为关联关系并没有建立正确,为null是因为多次申请的“无用对象”已经被释放了。
所以从这段示例中可以总结一点,对于一个存在返回值的函数,最好使用一个变量保存该返回值,以后直接使用该变量即可
(当然,涉及到深拷贝、浅拷贝之类的问题再另谈)。特别是对于Java,由于Java默认使用地址比较两个对象是否相等,所以采用第二种方法往往出现令人诧异的结果:因为不管你怎么System.out.println输出总是对的,然而他们只是内容一样,实际并不是相同的对象。


相关文档:

java打包jar,以及manifest文件使用说明

http://20921556.javaeye.com/blog/263974
关键字: java jar 
 Java的一种文档格式,JAR文件非常类似ZIP文件,也是一个压缩文件。JAR文件与ZIP文件惟一的区别就是在JAR文件的内容中,它包含了一个meta-inf/manifest.mf文件,这个文件是在生成JAR文件的时候自动创建的。需要注意的是,JAR文件不需要进 ......

Java 泛型的解析


泛型是J2SE 5.0最重要的特性。他们让你写一个type(类或接口)和创建一个实例通过传递一个或多个引用类型。这个实例受限于只能作用于这些类型。
比如,在java 5,java.util.List 已经被泛化。当建立一个list对象时,你通过传递一个java类型建立一个List实例,此list实例只能作用于所传递的类型。这意味着如果你传递一个St ......

java 定时器的使用(Timer)

第一种方法为常见且易于上手
1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作
等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
private java.util.Timer timer;
timer
= new Timer(true);
timer.schedule(
new java.util.TimerTask() {
public void run() { // ......

Java入门-生成可执行jar文件的教程

http://www.cn-java.com/www1/?action-viewnews-itemid-3295
我想JAVA的爱好者,尤其是初学者大都有过这样的经历,就是喜欢JAVA编程语言(这个人的情况可能不一样),但是有时候总会觉得JAVA的优点便是她的“致命”的缺点。大家的信念依旧是“一次编译,到处运行”但是就是因为至一点JAVA ......

JAVA实现DES加密

DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准
,是1972年美国IBM
公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
DES加密算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。
DES工作 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号