Java方法性能中使用final关键字? [复制]

2023-12-25

是否使用final在方法参数中允许编译器或运行时环境更快地工作?例如,如果您有一个变量要传递给一个您知道不会被修改并按原样使用的方法,那么声明它是否更有效final?

例子: 第一种方法应该比第二种方法更快

public int isLargerAfterTripledFaster(int num, final int limit) {
    num *= 3;
    return (num > limit);
}

public int isLargerAfterTripled(int num, int limit) {
    num *= 3;
    return (num > limit);
}

如果我可以确定我永远不想在这里传递可修改的变量,我应该采用这种技术吗?


理论上,声明一个参数final不会产生任何影响:编译器可以足够聪明地发现你的方法不会改变limit参数,并优化它生成的代码,就像声明该参数一样final没有实际的声明。

通过声明方法参数可以获得的最大区别final是在匿名类中引用该参数的能力。

另一个有用的结果是,在你之后维护你的代码的人会知道保持该参数不变是你有意识的决定,而不是巧合。

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

Java方法性能中使用final关键字? [复制] 的相关文章

随机推荐

  • Gmail 未检测到回复字段

    我的设置中有以下设置反馈邮件程序 def notification feedback from email protected cdn cgi l email protection subject Some feedback recipie
  • HTML img 属性“完整”

    谁能解释一下属性的含义complete 我在某处读到这可能与 DOM 有关 img src folder pic jpeg 属性complete规范中没有定义的含义 并且它可能没有任何效果 尽管可以使用getAttribute 方法 所以问
  • 我需要从 serviceworker 中访问本地存储或 cookie

    我希望在推送事件之后进行 fetch 调用 通过内部 api 获取 notif 数据 其中包含用户特定的参数 这些参数存储在本地存储或 cookie 中 例如用户类型或国家 地区 ID 我该怎么做 您无法在 Service Worker 中
  • 设置 mex 以使用 Visual Studio 2010 编译器

    我安装了 Visual Studio 2010 但是 MATLAB 找不到编译器 gt gt mex setup Please choose your compiler for building external interface MEX
  • 沿着 d3 中的路径拖动

    使用 d3 和 React 我绘制了一条路径 在这条路径上 我有多个圆圈 只能沿着该路径拖动 然而 我当前的实现仅 在某种程度上 在该路径上有一个圆圈时才有效 在 DragStart 上 无论位置如何 它都会在路径上移动到长度 0 并且每当
  • 仅显示 x 轴图的第一个和最后一个刻度标签

    我正在解析日志文件并创建一个绘图 我不需要 X 轴上的所有标签 我只想显示第一个和最后一个或其中的几个 并带有特定的步骤 假设每 100 个 我怎样才能做到这一点 我只能显示第一个或最后一个 但不能同时显示两者 My code import
  • PHP 的日期和时间助手(如 Java 中的 Joda-Time)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个类似的库 开源 乔达时间 http www joda org joda time 在Ja
  • 在 CMake 中混合 C 和 C++,什么是 CMakeCCompilerId.c 以及如何丢弃它

    我有一个混合 C 和 C 的简单项目 将 C 库包装到 C 类中并使其易于在 C 项目中使用 该项目是使用 VisualStudio 构建的 我在 Linux 或 Mac 下 所以我想将其转换为 CMake 项目 VS项目内容满满的
  • 在可扩展列表中以编程方式扩展组行

    我正在使用可扩展列表视图 当单击里面的图像时 我是否可以展开组行 我知道要让图像响应点击 我必须设置其焦点 现在 一旦此图像响应单击 在我的客户适配器内 我如何以编程方式展开 折叠它所属的特定组行 谢谢 在适配器中 private OnIt
  • Windows ssh - 如何在断开连接后保持进程运行

    我想通过 SSH PHP 脚本 启动 java 进程 Minecraft 服务器 并且在断开连接时不应将其关闭 我正在使用适用于 Windows 和 64 位 Java 的 Bitvise SSH 服务器 我可以启动服务器 但如果我与 ss
  • 如何在 Firefox Mobile (Fennec) 扩展的内容脚本中使用 jQuery?

    我正在开发 Firefox Mobile Fennec 扩展 我想在内容脚本中使用 jQuery 最好的方法是什么 我正在桌面版 Firefox Mobile 4 上进行测试 覆盖 js window addEventListener lo
  • 合并两个数组而不使用额外空间

    我有 2 个已排序的数组 a1 and a2 长度l1 and l2 分别 数组a2长度末尾有空格l1 所以它可以容纳所有元素a1除了它本身的元素之外 现在我想合并a1 into a2以便a2将包含以下所有元素a1 and a2按排序顺序
  • 命令行 Jasypt 客户端加密“无法操作”

    我正在使用 Jasypt 以非明文格式将数据库密码存储在休眠配置文件中 例如代替
  • C++ 模板和 ODR 规则

    为什么以下工作在C 我想ODR规则将出现在以下代码中 typedef char int8 class Sample public template
  • 当用户创建挂载点时如何收到通知?

    首先 这是限制 必须在XP上运行 必须通知驱动器盘符分配以及将卷安装到文件夹 如果驱动器正在睡眠 则不得 唤醒 该驱动器 我真的不想轮询驱动器 我尝试过的 Google 我查看了 WMI 和 Win32 LogicalDisk 类 我可以确
  • Linux 上的 Docker - 清空已安装的卷

    我正在尝试让我的 docker 设置在我的 Linux 机器上运行 它在 OSX 上运行良好 我一生都无法将卷正确安装到 Linux 机器上 我使用的是 Elementary OS 0 4 Loki 64 位 码头工人版本 Client V
  • 如何在 OpenCV 中校正裁剪后的立体图像?

    我有一对水平对齐的立体相机 它们是使用图像的全尺寸进行校准的 我通过调用 cv2 initUn DistorifyMap 来获取每个摄像机的地图进行纠正 然后调用 cv2 remap 使用全尺寸图像时 如下所示 map1 map2 cv2
  • 如何在select2框架中使用占位符作为默认值

    获得a的选定值select2我在用着 var x select select2 data var select choice x text 问题是 如果未选择值 则会引发错误 我想知道如果未选择任何选项 是否有任何方法使其返回占位符 您必须
  • 使用 Mathnet 数字库进行 Svd 重组似乎是错误的

    我正在寻找 Mathnet Iridium 和 Mathnet Numerics 之间的非回归 这是我的代码 使用 Mathnet Numerics double symJaggedArray new double 5 symJaggedA
  • Java方法性能中使用final关键字? [复制]

    这个问题在这里已经有答案了 是否使用final在方法参数中允许编译器或运行时环境更快地工作 例如 如果您有一个变量要传递给一个您知道不会被修改并按原样使用的方法 那么声明它是否更有效final 例子 第一种方法应该比第二种方法更快 publ