覆盖布尔值时会发生什么?

What happens when you overwrite a Boolean value?

这个问题是关于布尔值而不是布尔值的(但我很想知道两者的情况是否相同)。假设您有一个函数对数据执行多项检查,并且在每种情况下它都有特定的响应。您希望该函数显示所有无效输入(以及它们无效的原因),因此您想要检查所有输入(不仅仅是一个和停止和 return)。使用单个布尔值(如 Boolean x = isValidEmail(String email))然后处理它是否是一种更好的方法,如果它无效并在以后的检查中重用 x 以便您不分配额外的内存,或者您应该做(布尔 x = isValidEmail(字符串电子邮件),布尔 y = isValidPassword(字符串密码))。我希望这个问题在我提出它的方式中不会太混乱。我已经放了一个我试图实现的代码示例来给你一个想法。

        //Checking if email is valid
        Boolean isValidEmail = registrationService.emailIsValid(user.getEmail());
        if(!isValidEmail) {
            model.addAttribute("invalidEmail", true);
        }
        
        //Checking if email length is valid
        Boolean emailIsValidLength = registrationService.emailIsValidLength(user.getEmail());
        if(!emailIsValidLength) {
            model.addAttribute("invalidEmailLength", true);
        }

如您所见,我创建了单独的布尔值。重用第一个布尔值并执行

是否更好
IsValidEmail = registrationService.emailIsValidLength(user.getEmail()); 

而不是创建两个独立的布尔实例?

在 javac 和 JIT 有机会优化之后,两种方式的成本都相同。

写最清楚的东西 -- 这意味着使用新变量。

(请注意,这与您不“创建新实例”的方式有关,几乎肯定只是创建对现有对象的引用。)

这取决于你的情况,你稍后会使用布尔值,还是验证是一次性的事情,这不仅仅涉及对象布尔值,

对于单次使用,我通常这样做:

        if(!registrationService.emailIsValidLength(user.getEmail());) {
            model.addAttribute("invalidEmail", true);
        }
        
        //Checking if email length is valid
        if(!registrationService.emailIsValidLength(user.getEmail());) {
            model.addAttribute("invalidEmailLength", true);
        }

如果我以后需要布尔值,我会将结果存储在一个变量中,因为你为什么要再次调用该函数?

如果您想 return 全局错误消息,将结果存储在一个变量中也是有效的。

使用单独的布尔值,完全不会影响 java 性能,如果我是你,我会关注数据结构和时间复杂度。