1、一般来说,最好能重用对象而不是每次需要的时候就创建一个功能相同的新对象
先看一个反例,如下所示:
String s = new String("No way");
该语句每次被执行都会创建一个新的String实例。传递给String构造器的参数"No way"本身就是一个String实例,功能方面等同于构造器创建的对象。如果被频繁调用,会创建成千上万不必要的String实例,加大开销。
下面这是一个改进版本:
String s = "No way";
无须每次执行的时候都创建一个新的String实例,而且它可以保证,对于所有在同一台虚拟机中运行的代码,只要它们包含相同的字符串字面常量,该对象就会被重用。JVM中会有一个常量池,可以保存字符串常量,直接使用"No way"可以直接从常量池中返回对象,而不会重新创建新对象。
2、优先使用静态工厂方法而不是构造器
特别说明:不可变类是指一旦一个类的对象被创建出来,在其整个生命周期中,它的成员变量就不能被修改。Java平台的类库中包含许多不可变的类,比如说String、基本类型的包装类(Integer)、BigInteger和BigDecimal。存在不可变的类有许多理由:不可变的类比可变的类更加容易设计、实现和使用,它们不容易出错,而且更加安全。文章来源:https://www.toymoban.com/news/detail-722768.html
对于同时提供了静态工厂方法和构造器的不可变类,通常优先使用静态工厂方法而不是构造器,以避免创建不必要的对象。例如静态工厂方法Integer.valueOf(String)几乎总是优先于构造器Integer(String)。构造器在每次被调用的时候都会创建一个新的对象,而静态工厂方法则从来不要求这样做,实际上也不会这样做。文章来源地址https://www.toymoban.com/news/detail-722768.html
public class Demo {
public static void main(String[] args) {
// 使用带参构造器
Integer a1 = new Integer("1");
Integer a2 = new Integer("1");
//使用valueOf()静态工厂方法
到了这里,关于避免创建不必要的对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!