避免创建不必要的对象

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。存在不可变的类有许多理由:不可变的类比可变的类更加容易设计、实现和使用,它们不容易出错,而且更加安全。

对于同时提供了静态工厂方法和构造器的不可变类,通常优先使用静态工厂方法而不是构造器,以避免创建不必要的对象。例如静态工厂方法Integer.valueOf(String)几乎总是优先于构造器Integer(String)。构造器在每次被调用的时候都会创建一个新的对象,而静态工厂方法则从来不要求这样做,实际上也不会这样做。

public class Demo {public static void main(String[] args) {// 使用带参构造器Integer a1 = new Integer("1");Integer a2 = new Integer("1");//使用valueOf()静态工厂方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-装饰器模式

装饰器模式(Decorator Pattern)是一种设计模式,它允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。 在Java中,装饰器模式可以通过以下方式实现: 1. 创建一个接口…

从实时数据库转战时序数据库,他陪伴 TDengine 从 1.0 走到 3.0

关于采访嘉宾 在关胜亮的学生时代,“神童”这个称号如影随形,很多人初听时会觉得这个称谓略显夸张,有些人还会认为这是不是就是一种调侃,但是如果你听说过他的经历,就会理解这一称号的意义所在了。 受到教师母亲的影…

处理sass-loader安装失败

Vue项目中安装node-sass跟sass-loader 我们在开发中,经常会使用sass语法来编写css,在安装node-sass和sass-loader时,经常会出现错误(通常是依赖冲突)导致安装失败。因为官方发布的版本号并不是连续的,有些版本与版本之…

【ssh_config】SSH中配置多个private key

当要使用多个不同的private key登录不同的主机时,我们可以在ssh命令里面用-i参数指定每次使用的private key文件。 但是这样做比较发麻而且容易出错,我们可以利用~/.ssh/config文件,在让ssh自动为我们决定应该使用哪个key。 基本方法 最简单…

ESRI ArcGIS Desktop 10.8.2图文安装教程及下载

ArcGIS 是由美国著名的地理信息系统公司 Esri 开发的一款地理信息系统软件,它是目前全球最流行的 GIS 软件之一。ArcGIS 提供了图形化用户界面和数据分析工具,可以帮助用户管理、分析和可视化各种空间数据。ArcGIS Desktop是一个完整的桌面GIS软件套件&a…

【软件安装】docker 安装 elasticsearch 和 kibana

首先根据需要选择相应的版本号,然后分别执行下面的脚本 install_elasticsearch.sh docker run -it --name es_710 \-p 9200:9200 \-p 9300:9300 \-e "discovery.typesingle-node" \-e ES_JAVA_OPTS"-Xms5g -Xmx10g" \-e "TAKE_FILE_OWNE…

JVMGC复习

TLAB:默认给每一个线程开辟一块内存空间存放线程自己的对象 Class对象是存放在堆区的,不是方法区,类的元数据元数据并不是类的Class对象,Class对象是加载的最终产品,类的方法代码,变量名,方法名&#xff0c…

【黑马程序员】机器学习

(一)机器学习概述 一、机器学习算法分类 1、监督学习: (1)目标值是类别:分类问题 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归 (2)目标值是连续型的数据:回归…

微信小程序进阶——后台交互

目录 一、后台准备 1.1 pom.xml 1.2 配置数据源 1.3 整合mybatis 二、前后端交互 2.1 method1 2.2 method2 2.2.1 封装request 2.2.2 头部引用util 2.2.3 编写方法 2.2.4 展示效果 三、WXS的使用 3.1 会议状态 3.1.2 引入wxs 3.1.3 修改代码 3.1.4 展示效果 3…

【python】进程和线程

进程和线程 今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行&#xff…

WuThreat身份安全云-TVD每日漏洞情报-2023-10-12

漏洞名称:curl SOCKS5 堆溢出漏洞(CVE-2023-38545) 漏洞级别:高危 漏洞编号:CVE-2023-38545,CNVD-2023-75809 相关涉及:cURL libcurl >7.69.0&#xff0c;<8.3.0 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-25382 漏洞名称:Apache H…

关于 Invalid bound statement (not found): 错误的解决

关于 Invalid bound statement not found: 错误的解决 前言错误原因解决方法1. 检查SQL映射文件2. 检查MyBatis配置3. 检查SQL语句4. 检查命名约定5. 清除缓存6. 启用日志记录 重点注意 结语 我是将军我一直都在&#xff0c;。&#xff01; 前言 当开发Java Spring Boot应用程…

自然语言处理基础

自然语言 自然语言处理是人工智能能够通过图灵测试的重要工具。 自然语言处理基本的任务和应用 词性标注&#xff1a;把每句话的各个单词的词性标注出来&#xff0c;例如&#xff1a;形容词、名词、动词 named entity recognition命名实体的识别&#xff1a;识别哪些单词是真…

小程序OCR身份证识别

使用两种OCR识别&#xff1a;小程序和腾讯云 1.基于微信小程序OCR插件实现身份证拍照、上传并OCR识别的示例&#xff1a; 首先&#xff0c;在小程序中添加身份证拍照的功能&#xff0c;可以使用wx.chooseImage()选择照片并使用wx.uploadFile()上传&#xff0c;代码如下&#…

Service Mesh和Kubernetes:加强微服务的通信与安全性

文章目录 什么是Service Mesh&#xff1f;Service Mesh的优势1. 流量控制2. 安全性3. 可观测性 Istio&#xff1a;Service Mesh的领军者流量管理安全性可观测性 Linkerd&#xff1a;轻量级Service Mesh流量管理安全性可观测性 Istio vs. Linkerd实际应用结论 &#x1f388;个人…

小度打头阵,百度大模型能否“赋能万物”?

文 | 智能相对论 作者 | 楷楷 近日&#xff0c;百度集团副总裁、小度科技原CEO景鲲因个人原因辞任&#xff0c;百度集团副总裁、首席信息官&#xff08;CIO&#xff09;李莹轮岗出任小度科技CEO&#xff0c;并向李彦宏直接汇报。 随着“景鲲时代”落幕&#xff0c;新任CEO李…

动态规划14(Leetcode516最长回文子序列)

代码&#xff1a; class Solution {public int longestPalindromeSubseq(String s) {int n s.length();int[][] dp new int[n][n];for(int in-1;i>0;i--){dp[i][i] 1;char c1 s.charAt(i);for(int ji1;j<n;j){char c2 s.charAt(j);if(c1c2){dp[i][j] dp[i1][j-1]2…

2023年中国档案信息化发展历程、竞争格局及行业市场规模分析[图]

档案信息化是以网络、计算机、信息技术为手段&#xff0c;以档案资源为对象&#xff0c;以档案工作为依托&#xff0c;以档案管理学最新理论为指导&#xff0c;按照信息社会和国家档案行政管理部门的要求、开展档案的收集、整理、保管、开发和利用的现代化管理过程。 档案信息化…

[SQL开发笔记]INSERT INTO 语句:将新记录插入到数据库表中

目前&#xff0c;向数据库插入数据是数据管理的重要环节&#xff0c;它可以将数据长期保存、共享访问、保证数据的完整性和安全性&#xff0c;同时也是进行数据检索和分析的基础。其中&#xff0c;INSERT INTO 语句是SQL&#xff08;结构化查询语言&#xff09;中用于向数据库表…

vue-router 路由模式有几种?

Vue Router 提供了三种路由模式: 1:Hash 模式(默认): 在 URL 中使用带有 # 符号的哈希值来管理路由。例如:http://xxxx.com/#/path。 在 Hash 模式下,当 URL 的哈希值发生变化时,浏览器不会向服务器发送请求,而是通过监听 hashchange 事件来进行路由导航。 2:Hist…