Java:“xx”.equals(变量)比variable.equals(“xx”)更好,真的吗?

2023-12-21

我正在审查最佳实践手册和推荐编码java,我认为这是值得怀疑的。

推荐:

String variable;

"xx".equals(variable) // OK

variable.equals("xx") //Not recomended

因为可以防止出现不受控制的 NullPointerException

这是真的?


这是一种非常常见的技术,如果变量为空,它会导致测试返回 false,而不是抛出NullPointerException。但我想我会有所不同,并说我不会将此视为您始终应该遵循的建议。

  • 我绝对认为这是所有 Java 程序员都应该意识到的事情,因为它是一个常见的习惯用法。
  • 这也是一种使代码更加简洁的有用技术(您可以同时处理 null 和 not null 情况)。

But:

  • 它使您的代码更难阅读:“如果天空是蓝色的话……” https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2430307#2430307
  • 如果您刚刚检查了前一行的参数不为空,那么就没有必要。
  • 如果您忘记测试 null 并且有人确实提供了您没有预料到的 null 参数,那么NullPointerException不一定是最坏的结果。假装一切正常并一直坚持到后来最终失败并不是更好的选择。快速失败是件好事。

我个人don't认为在所有情况下都应该需要使用此技术。我认为这应该留给程序员根据具体情况进行判断。重要的是确保您以适当的方式处理 null 情况,并且如何处理取决于具体情况。检查空值的正确处理可能是测试/代码审查指南的一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:“xx”.equals(变量)比variable.equals(“xx”)更好,真的吗? 的相关文章

随机推荐

  • AsyncPostBackTrigger 在我的应用程序中不起作用

    我遇到一个有趣的问题 我们正在使用母版页运行一个网站 在其中一个页面中 我需要创建一个更新面板 该面板将在完成时显示组 SSID 因此 在内容占位符之一中 我将其放入
  • Unicode“退格键”U+0008 的用途是什么?

    Unicode 字符 BACKSPACE U 0008 在编程中的用途是什么 它可以用于哪些应用 On output to a terminal it typically moves the cursor one position to t
  • Pandas:将具有重复行名称的数据重塑为列

    我有一个类似这样的数据集 显示第一行 Sample Detector Cq P 1 106 23 53152 P 1 106 23 152458 P 1 106 23 685083 P 1 135 24 465698 P 1 135 23
  • 如何规避第 3 方 https 网站的同源政策?

    我有一个http 需要访问第三方 JSON API 的站点 该 API 公开在https 地点 我已读完规避同源策略的方法 https stackoverflow com questions 3076414 ways to circumve
  • 从包内读取 SSIS 包文件名(包部署)

    我使用包部署模型在 Visual Studio SSDT 2012 中创建了一个 SSIS 包 有没有办法从包内以只读变量或属性的形式访问包的文件名 我没有看到它被列为系统变量 有什么办法可以通过脚本任务吗 我认为您需要检查 System
  • 运行线程时,旋转变换在重绘中无法正常工作

    我一直在努力使这个程序正常工作 尽管我似乎找不到问题所在 这个程序由以下两个类组成 不多也不少 基本上应该在绘图区域中每次单击时绘制一个点 并在第三次单击时连接所有点 我仍然需要努力让它变得更漂亮 更准确 但这部分是有效的 不起作用的是应该
  • Firebase 时间戳返回错误日期 - Javascript

    我正在尝试从 firestore 获取时间戳值 使用 Firebase 函数 并且我已经使用时间戳的 toDate 方法和矩库在本地成功完成了此操作 moment doc data EndDate toDate 但是 当我将代码部署到 fi
  • UIAlertViewDelegate 和更多警报窗口

    我有实现 UIAlertViewDelegate 的控制器 在实施中我有 void alertView UIAlertView alertView clickedButtonAtIndex NSInteger buttonIndex 方法
  • jQuery 远程验证与服务器生成的错误消息

    我正在使用 Validation jQuery 插件来进行一些验证 我有一项服务现在返回 真 和 假 一切都很好 但是 我使用的错误消息是 该名称已被占用 我希望错误消息是 That name is already a href item
  • 为什么针对旧版本框架时会编译 .NET 4.6 特定代码? [复制]

    这个问题在这里已经有答案了 我有一个针对旧版本 NET 框架 NET 4 5 2 的项目 我安装了 Visual Studio 2015 因此我的计算机上安装了 NET 4 6 我注意到 如果我使用 NET 4 6 C 6 中发布的 C 语
  • 百度地图在安全页面上的实现

    我们正在确保中国网站的商店定位器页面安全 但问题是百度 URL自动重定向到 http url 当我点击上面的 URL 时https api map baidu com https api map baidu com 在浏览器中显示以下代码
  • 与函数式编程中的“fold”函数等效的“pythonic”是什么?

    在 Haskell 中实现如下目标的最惯用的方法是什么 foldl 0 1 2 3 4 5 gt 15 或者 Ruby 中的等价物 1 2 3 4 5 inject 0 m x m x gt 15 显然 Python 提供了reduce函数
  • 保存到数据库后 React Redux 存储状态更新过程

    我的问题是概念性的 基于这篇文章中概述的问题 React Redux 更新数据库后捕获更新的存储状态 https stackoverflow com questions 48695120 我认为不需要任何代码来理解或能够回答它 但如果没有的
  • Asp.Net - 什么是 <%$?

    我现在应该知道这一点 但我不知道 而且出于某种原因 我在谷歌上找不到答案 所以我想我应该在这里尝试一下 我知道相当于Response Write 而且我见过用于数据绑定 然而 今天我注意到一些新的东西 尽管我可以看到它在做什么 但我正在寻找
  • Android Studio:我的项目视图看起来不同

    我已经在 Android Studio 中处理一个项目几个星期了 今天打开一看 突然项目结构全乱了 通常 它看起来像这样 标准项目结构 http unhackathon org springboard projects img filest
  • h2o-xgboost 支持多CPU 吗?

    是否有允许运行的配置H2OXGBoostEstimator在多线程中 而不是在具有一个 CPU 的最小配置中 使用 h2o 版本 3 15 0 4035 H2O 上的 xgboost 实现是多线程的 与 H2O 支持的所有其他算法一样 但它
  • 32位应用程序是什么意思?

    我不确定 16 位或 32 位应用程序是什么意思 16 位应用程序是不需要超过 2 16 字节内存空间的应用程序吗 这个16位是指应用程序的最大大小吗 这意味着应用程序已针对具有 16 位内存寻址或 32 位内存寻址的处理器进行编译 64
  • 如何在 EclipseLink 中启用编织?

    在部署实体中具有延迟获取的应用程序时 我在 GlassFish 终端上收到以下警告 警告 恢复延迟设置OneToOne or ManyToOne属性 zoneTable 对于实体类 class entity ZoneCharge 因为编织未
  • 为什么某些 CSS 属性不应用于 a:visited? [复制]

    这个问题在这里已经有答案了 我的网站有一些链接样式 CSS 如下 a link font family Verdana Tahoma Geneva sans serif text decoration none color 0676b3 a
  • Java:“xx”.equals(变量)比variable.equals(“xx”)更好,真的吗?

    我正在审查最佳实践手册和推荐编码java 我认为这是值得怀疑的 推荐 String variable xx equals variable OK variable equals xx Not recomended 因为可以防止出现不受控制的