测试null和str相等比较的性能差别问题

Aurix TC275 HSM国密算法集成实战:从问题排查到性能优化 硬件安全模块(HSM)作为嵌入式系统的安全基石,通过硬件隔离和专用加密引擎为敏感数据提供保护。其核心原理是在独立的安全环境中执行加密操作,确保密钥和中间数据不暴露于主处理器。在汽车电子、物联网等高安全要求场景中,HSM对于实现国密算法(如SM2、SM4)的合规性与安全性至关重要。然而,实际集成常遇到加密结果异常或系统卡死等问题,根源多在于参数配置、端序处理或固件支持等细节。本文以英飞凌Aurix TC275为例,系统解析HSM架构与国密算法支持现状,提供从环境初始化、密钥管理到结果验证的完整实战流程,并针对 阅读详情

原文地址:http://www.java2000.net/p12096

到底是 str==null 快一些还是 null==str 快一些呢?
我们还是亲自测试一下看看吧,大家也可以看看代码,然后自己测试一下,不要人云亦云。包括我自己的结论也是这样,请有疑虑的人亲自测试,看结果。

先看测试代码
  1. /**
  2.  * 测试传说中的null==str的性能问题。<br>
  3.  * 据说 null==str比str==null的性能高一些。<br>
  4.  * 我们来测试一下看看
  5.  * 
  6.  * @author 老紫竹 JAVA世纪网(java2000.net)
  7.  * 
  8.  */
  9. public class Test {
  10.   static int TIMES = 1000000000;
  11.   static String str = "JAVA2000.net";
  12.   public static void main(String[] args) {
  13.     long t1;
  14.     long t2;
  15.     // 测试10轮
  16.     for (int i = 0; i < 10; i++) {
  17.       t1 = test1();
  18.       t2 = test2();
  19.       System.out.printf("str == null:%13d/t", t1);
  20.       System.out.printf("null == str:%13d/t", +t2);
  21.       System.out.printf("Diff=%13d", t2 - t1);
  22.       System.out.println();
  23.       // 顺序颠倒一下
  24.       t2 = test2();
  25.       t1 = test1();
  26.       System.out.printf("str == null:%13d/t", t1);
  27.       System.out.printf("null == str:%13d/t", +t2);
  28.       System.out.printf("Diff=%13d", t2 - t1);
  29.       System.out.println();
  30.     }
  31.   }
  32.   public static long test1() {
  33.     long t1 = System.nanoTime();
  34.     for (int i = 0; i < TIMES; i++) {
  35.       if (str == null) {
  36.         ;
  37.       }
  38.     }
  39.     return System.nanoTime() - t1;
  40.   }
  41.   public static long test2() {
  42.     long t1 = System.nanoTime();
  43.     for (int i = 0; i < TIMES; i++) {
  44.       if (null == str) {
  45.         ;
  46.       }
  47.     }
  48.     return System.nanoTime() - t1;
  49.   }
  50. }

我的测试结果
  1. str == null:   1331211649   null == str:   1306476382   Diff=    -24735267
  2. str == null:   1325049972   null == str:   1310683341   Diff=    -14366631
  3. str == null:   1321184396   null == str:   1314800066   Diff=     -6384330
  4. str == null:   1308572459   null == str:   1310631659   Diff=      2059200
  5. str == null:   1322850530   null == str:   1312672142   Diff=    -10178388
  6. str == null:   1310835595   null == str:   1312089385   Diff=      1253790
  7. str == null:   1324557172   null == str:   1311582059   Diff=    -12975113
  8. str == null:   1311757780   null == str:   1329927686   Diff=     18169906
  9. str == null:   1325011978   null == str:   1305032064   Diff=    -19979914
  10. str == null:   1325790010   null == str:   1309495201   Diff=    -16294809
  11. str == null:   1308165144   null == str:   1316338529   Diff=      8173385
  12. str == null:   1321638644   null == str:   1310619646   Diff=    -11018998
  13. str == null:   1305769309   null == str:   1306789550   Diff=      1020241
  14. str == null:   1324110187   null == str:   1307757550   Diff=    -16352637
  15. str == null:   1311276712   null == str:   1309109957   Diff=     -2166755
  16. str == null:   1323087432   null == str:   1308201741   Diff=    -14885691
  17. str == null:   1305018096   null == str:   1304627264   Diff=      -390832
  18. str == null:   1326120778   null == str:   1314136852   Diff=    -11983926
  19. str == null:   1312848141   null == str:   1306828382   Diff=     -6019759
  20. str == null:   1319538097   null == str:   1313048725   Diff=     -6489372

我的结论:

1 测试10亿次,最大的差别在0.024秒
2 整体上 null==str的速度快于str==null
3 个别情况则正好相反
4 个人认为,这个数量级的差距,我个人就不考虑了。呵呵呵!
JavaScript数组查找四大方法选型指南:includes、indexOf、find、findIndex JavaScript数组查找是前端开发最基础也最易误用的核心操作。其本质涉及值比较(===)与逻辑断言(回调函数)两大范式,直接影响NaN处理、对象匹配、索引获取与性能表现。Array.includes()语义清晰且支持NaN相等性,适合存在性判断;Array.indexOf()兼容性好但仅适用于原始值严格匹配;Array.find()和Array.findIndex()则通过回调函数实现任意条件查找,分别返回匹配元素或索引,是处理对象、嵌套结构及动态规则的首选。在电商筛选、IoT设备状态定位、风控规则引擎 阅读详情

相关推荐

.NET String底层原理:不可变性、驻留机制与性能优化

String是.NET中最基础却最易被误解的类型,其本质并非简单字符数组,而是具备不可变性(Immutability)和字符串驻留(Interning)特性的托管对象。这种设计源于CLR对内存安全与并发一致性的权衡:不可变性避免共享引用下的竞态问题,驻留机制通过全局哈希表复用常量字符串以减少堆压力。技术价值体现在零锁并发、编译期优化(ldstr指令)和GC友好性上;典型应用场景包括高频日志拼接、微服务参数比对、配置键字典查找及JSON反序列化后处理。本文深入IL层与托管堆视角,解析string与System

世范水晶 133

C++ nullstr

C++ nullptr

huajiaoejctu的博客 295

Windows安装Pytorch3d

pytorch和pytorch3d版本对应关系如下:https://github.com/facebookresearch/pytorch3d/releasescuda和NVIDIA CUB版本对应关系如下:https://github.com/NVIDIA/cub/releases?page=1本人配置如下:GPU:1050TiCUDA:11.1python:3.8。

Snakewood的博客 4287

C++中NULL和nullptr

C++中NULL和nullptr

weixin_41653613的博客 1544

Windows下用Docker快速搭建SearXNG私有搜索引擎(附Dify集成配置)

本文详细介绍了在Windows环境下使用Docker快速搭建SearXNG私有搜索引擎的完整流程,包括环境准备、容器化部署、安全配置优化以及与Dify平台的深度集成方法。通过分步指导和实用配置示例,帮助开发者构建兼具隐私保护和AI增强能力的本地化搜索解决方案,特别适合需要定制化搜索服务的应用场景。

weixin_30300225的博客 336

别再为PT100测温发愁了!手把手教你用ADS1247+STM32搞定高精度温度采集(附完整源码)

本文详细介绍了如何利用ADS1247高精度ADC与STM32微控制器构建PT100测温系统,实现±0.1℃的温度测量精度。内容涵盖硬件设计、寄存器配置、SPI通信优化及温度换算算法,特别适合工业自动化和精密仪器领域的嵌入式开发人员参考。

weixin_26897585的博客 428

NULL与 nullptr的理解

nullptr

LH is programming hard 1989

ARM CMSIS DAP源码分析(二)

今天分析的是RDDI_DAP_GetARMRegs(DWORD *regs, DWORD *rfpu, ULONG64 mask)和RDDI_DAP_SetARMRegs(DWORD *regs, DWORD *rfpu, ULONG64 mask)这两个函数。 以RDDI_DAP_GetARMRegs(DWORD *regs, DWORD *rfpu, ULONG64 mask)为例,代码如下:

pengxiao618的专栏 7977

一文搞懂 NULL 和 nullptr 的区别【CC++面试必备】

大家可能对 NULL 和 nullptr 都有了解,NULL属于C 语言中的宏,后来 C++11 引入了 nullptr 关键字,都用来表示空指针。那问题来了,为什么 C++11 要引入 nullptr 呢?那必定是 NULL 在某些方面存在某些不足,所以引入了nullptr,下面我们来看一下!在 C 语言中,NULL是一个宏,被定义为空指针,定义形式如下所示: 我们来看一个 C++ 中使用 NULL 的例子,代码如下所示: 编译结果为: 从编译结果来看,显示程序有二义性,程序提示 func(NULL) 有

jiey0407的博客 8578

模拟IC设计笔记:拆解一个经典的时钟占空比校正(DCC)电路模块,从理论到SPICE仿真

本文深入解析了时钟占空比校正(DCC)电路在模拟IC设计中的关键作用,特别是在高速ADC应用中。通过晶体管级拆解,详细介绍了基于电荷泵和积分器的模拟反馈型DCC电路设计,包括占空比检测、误差放大与校正执行单元的实现。文章还提供了SPICE仿真验证方法,确保电路在100MHz时钟下的稳定性和性能。

weixin_33725722的博客 429

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1148

str != null 和 null != null的区别

这也是自己做项目,老大给的建议。      str != null 会出现空指针异常,而null !=str是永远不会出现空指针异常,而且也是极限编程建议的做法。目的的是防止出错。 例如: str.equals("123"). 如果养成了好的习惯,应该写成 "123".equals.(str). 因为就算str为空,还是会返回false,但如果用前者就是空指针异常。    具体汇编怎么实现

yuchang2012的专栏 1611

半车(前后、左右)、整车悬架详细推导建模和simulink仿真分析

用达朗贝尔定理依据悬架数学模型,得到悬架模型微分方程,分别用simulink建立前后半车、左右半车悬架;结合转向2自由度模型与半车侧倾模型,对模型考虑相干性、延时性的C级随机路面下,仿真分析给定角阶跃输入下的侧倾稳定性。

Mr.邹的博客 1万+

Hamcrest字符串匹配器:提升Java单元测试可读性与调试效率

在Java单元测试中,断言是验证代码行为的关键机制。其原理是通过比较预期结果与实际输出来确保程序逻辑正确性。传统的断言方式虽然功能完备,但在可读性和错误信息清晰度上存在局限,影响了测试代码的维护效率和调试体验。Hamcrest匹配器库通过提供一套声明式的领域特定语言,将测试意图转化为更接近自然语言的表达,显著提升了测试代码的可读性和失败诊断效率。在工程实践中,字符串匹配是单元测试中最常见的场景之一,涉及验证返回信息、格式检查、空值处理等。Hamcrest的字符串匹配器,如containsString、mat

weixin_30298497的博客 420

Windows Server 2016远程桌面服务配置和授权激活

Server 2016默认远程桌面连接数是2个用户,如果多余两个用户进行远程桌面连接时,系统就会提示超过连接数,可以通过添加远程桌面授权解决:1、添加远程桌面授权服务第一步:服务器管理 - 添加角色和功能打开添加角色和功能向导窗口,选择基于角色或给予功能安装:第二步:添加远程桌面会话主机和远程桌面授权功能:以上配置完成后即可使用多于2用户同时登陆,但使用期限为120天,再次登陆会有如下提示:2、添...

mahailiang的专栏 6万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java String核心方法全解析:从不可变性到性能优化实战

在Java编程中,字符串处理是基础且高频的操作。理解字符串的核心概念,如不可变性,是掌握其原理的关键。不可变性不仅保障了线程安全,还支撑了字符串常量池等性能优化机制。从这一原理出发,字符串在Java中衍生出丰富的API生态,用于内容比较、查找、替换、分割等常见场景,这些方法在数据处理、用户输入校验、文本解析等工程实践中具有重要价值。本文聚焦String类的核心方法,深入探讨equals与==的区别、substring内存优化、split方法边界处理等高频热词,并结合StringBuilder的性能优化策略,

weixin_30603633的博客 395

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Node.js单元测试实战:Mocha+Assert轻量级组合指南

单元测试是保障Node.js服务稳定性的基础工程实践,其核心在于通过断言验证函数输入与输出的确定性关系。Mocha作为成熟稳定的测试框架,配合Node.js原生assert模块,能实现零依赖、高可移植、语义清晰的测试组织与执行。该组合强调严格相等(strictEqual)、深度比较(deepStrictEqual)、错误捕获(throws/rejects)等关键断言能力,天然适配CommonJS生态,规避Jest等工具带来的抽象泄漏与CI不稳定性。适用于电商结算、用户校验、订单计算等对健壮性要求严苛的后端业

weixin_34138056的博客 462

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Shell脚本流程控制:if-then-elif-else语法详解与实战应用

流程控制是编程语言的核心概念,它使程序能够根据不同的条件执行不同的代码路径,从而实现智能化的决策逻辑。在Shell脚本编程中,流程控制是实现自动化任务从简单命令批处理升级为复杂逻辑工具的关键。其技术价值在于赋予脚本环境感知和动态响应的能力,极大地提升了运维自动化和任务处理的效率。典型的应用场景包括系统监控、日志分析、文件管理、服务部署等日常运维工作。本文聚焦于Shell脚本中最基础且使用频率最高的分支判断语句——if-then-elif-else结构,深入剖析其语法细节,并对比经典`[ ]`测试命令与现代`

weixin_34242819的博客 350

机器学习测试实战:数据漂移、模型行为与生产稳定性保障

机器学习测试并非传统软件单元测试的简单迁移,其核心在于应对数据分布变化、模型输出不确定性及端到端服务退化等特有挑战。它基于统计性行为验证而非确定性逻辑断言,强调对数据质量、特征一致性、预测稳定性与业务规则符合性的多层校验。关键技术价值体现在提前捕获数据语义漂移、防范线上NaN故障、量化模型退化风险,并支撑A/B测试与持续监控。典型应用场景覆盖电商反欺诈、NLP情感分析、实时风控等需高可靠交付的AI系统。本文聚焦ML测试工程化落地,深入解析数据契约、容忍度断言、黄金数据集与CI/CD集成等关键实践。

hwpokay的专栏 353

C语言数组深度解析:从内存布局到工程实践

数组作为计算机科学中最基础的数据结构之一,本质是一段连续的内存空间,用于存储相同类型的元素集合。其核心原理在于通过基地址和偏移量实现元素的随机访问,这背后是编译器将下标操作转换为指针运算的底层机制。理解这一机制的技术价值在于,它使开发者能够精确控制内存布局,从而编写出高效且安全的代码。在实际应用场景中,数组不仅是实现排序、搜索等算法的基石,更是构建字符串、矩阵以及更复杂数据结构(如栈、队列)的基础组件。本文聚焦于C语言中数组与指针的共生关系、内存越界陷阱以及高效排序实践,通过剖析数组名退化、二维数组内存布局

weixin_30522183的博客 681

if-else与switch选型指南:从执行机制到代码评审实践

分支语句是编程中最基础的控制结构,if-else与switch几乎出现在每一门语言中。理解两者的执行机制,是写出可维护代码的前提:if-else处理任意布尔表达式,灵活但分支过多时极易堆积复杂度;switch擅长离散等值匹配,在某些语言中可编译为跳转表,性能与结构都有优势。在代码评审中,如何选择分支工具直接影响代码的可读性与扩展性。无论是处理订单状态、配置映射,还是设计状态机,都需要根据场景平衡性能、可读性与维护成本。本文从一段真实的下单逻辑出发,对比if-else、switch与表驱动的优劣,揭示“八股”

weixin_34323858的博客 411

C语言库函数实现:从底层原理到工程实践

在计算机编程中,库函数是封装了常用功能的基础软件组件,它们通过提供标准化的接口简化了开发流程。从底层原理来看,库函数的实现涉及内存管理、指针操作和算法效率等核心概念,这些是理解计算机系统运作的关键。掌握这些原理不仅能提升代码质量,还能在性能优化、资源受限环境(如嵌入式系统)以及安全编程等场景中发挥重要价值。例如,通过亲手实现字符串处理函数,开发者可以深入理解缓冲区溢出等安全问题的根源,并学习如何设计更健壮的代码。本文以C语言标准库函数为例,探讨了从基础实现到性能优化的完整路径,涵盖了strlen、strcp

weixin_30709061的博客 357

编程中判空处理的四种核心方法与实践指南

在软件开发中,空值处理是确保程序健壮性的基础技术。空值通常指变量未赋值或指向无效内存地址的状态,其本质是程序运行时数据缺失的表示。理解空值的原理有助于避免空指针异常等常见运行时错误,提升代码的可靠性。从技术价值看,完善的判空机制能显著增强程序的容错能力,减少线上故障,是高质量代码的标志。在实际应用场景中,无论是处理用户输入、解析API响应还是操作数据库结果,都需要对可能为空的数据进行安全访问。本文聚焦于JavaScript/TypeScript、Java等语言中的判空实践,详细解析基础条件判断、可选链操作符

weixin_34259232的博客 398

C语言字符串与内存函数深度解析:从原理到模拟实现

在C语言编程中,字符串和内存操作是基础且核心的技术概念。字符串本质是以空字符'\0'结尾的字符数组,标准库提供了一系列函数如strlen、strcpy、strcmp等用于其操作,而内存函数如memcpy、memmove、memset则直接处理原始字节。理解这些函数的底层原理,包括指针运算、内存布局和边界检查,对于编写健壮、安全的代码至关重要。例如,strcpy和strcat因不检查目标缓冲区大小,易导致缓冲区溢出安全漏洞,而strncpy和strncat等“n”系列函数提供了更安全的替代方案,但仍需注意结束

weixin_34115824的博客 404
上一篇: 博客到底是用来干什么的?
下一篇: 老紫竹JAVA提高教程(3)-认识Set集合之LinkedHashSet
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值