避免创建重复的对象

避免创建重复的对象,这个问题应该每个人都明白,但是我们很多人在平时没有给予足够的重视。

举个老生常谈的例子:

{

String a="Hello World";

String b=a;

}

{

String a="Hello World";

String b="Hello World";

}

{

String a="Hello World";

String b=new String("Hello World");

}

{

String a=new String("Hello World");

String b=new String("Hello World");

}

上面这些该死的代码块能说明什么问题?如果对每一个块做a==b的比较会得到什么结果?

虽然现在计算机整体性能的提升以及JVM效能的提高,都使得创建和回收一个对象不再是捉襟见肘的事情了,但是一个好的系统还是希望在时间和空间上实现最优化。重复创建不必要的对象第一维护起来会很困难,第二,在重用的问题上也得好好的斟酌斟酌。

JAVA虽然不提供指针运算,但是和提供了没有什么区别,反而更加让人糊涂。就拿上面的块来看:我们平时定义

String a="Hello World";

通俗的说,是先在内存中开辟一块空间放入“Hello World”(这就是创建了对象),然后把该内存空间地址的一个引用赋给变量a,也就是把a指向开辟的内存空间。我们使用该定义,如第二个块,实际上只创建了一个对象,而把它的引用赋给了不同的变量,就像起别名一样,怎么叫都是同一个人。但是,我们在实际的应用中确实也就只需要一个“Hello World”,不是吗?

如果还需要,再new一个也无妨。new 意思就是新建一个内存空间,也就是新建一个对象。仅仅定义了变量而不new,是没有用的,就像孩子还没有出生,名字就已经想好了一样。举个例子:

public class A

{

public static void main(String[] args)

{

String a;

for(int i=0;i<=10;i++)

{

a="Hello World";

System.out.println(a);

}

System.out.println(a);

}

}

编译上面的程序,你会发现通不过,提示:未初始化变量a。这就很能说明一个问题,你创建了a这个String变量,但是没有让他指向任何的对象,而创建内存空间,也就创建对象并把引用赋给a这个过程是在for块中进行的,等到出了for块,垃圾回收就把创建的内存空间回收掉了,a自然又成了有名无实的东西了。

所以,创建对象的时候,你new了几次,就创建了多少个对象,一个对象就是一块内存空间,你为“Hello World”分配了一堆空间,却仅仅是同一个用途,就是浪费。

对于复杂的程序,如果有一些对象是必须创建的,但是却只使用同一个实例,那么就将它们提取出来,单独的放在一个块中,最好的建议是把这些对象定义成final,然后在程序中提供一个static块初始化它们。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值