gpt4 book ai didi

java - 在同一 block 中调用方法两次。为什么?

转载 作者:行者123 更新时间:2023-12-02 01:27:30 27 4
gpt4 key购买 nike

我正在阅读一篇博客文章并试图了解发生了什么。 This is the blogpost.

它有这个代码:

if (validation().hasErrors()) 
throw new IllegalArgumentException(validation().errorMessage());

在validation()方法中,我们有一些对象初始化和计算,所以可以说这是一个昂贵的调用。难道要执行两次吗?还是会被编译器优化成这样?

var validation = validation();
if (validation.hasErrors())
throw new IllegalArgumentException(validation.errorMessage());

谢谢!

最佳答案

验证方法将被调用两次,并且每次都会执行相同的工作。首先,该方法比较大,因此不会被内联。如果没有内联,编译器不知道它做了什么。因此,它可以安全地假设该方法有副作用,因此无法优化第二次调用。

即使该方法是内联的,并且编译器可以检查它,它也会发现实际上存在副作用。每次调用 LocalDate.now() 都会返回不同的结果。因此,您链接到的代码有缺陷,尽管在实践中不太可能遇到问题。

将验证结果捕获到局部变量中更安全,不是出于性能原因,而是出于稳定性原因。想象一下奇怪的情况,初始验证调用失败,但第二次调用通过。然后你会抛出一个没有消息的异常。

关于java - 在同一 block 中调用方法两次。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74145828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com