gpt4 book ai didi

java - 运行时是否会忽略断言语句?

转载 作者:行者123 更新时间:2023-12-02 08:42:02 25 4
gpt4 key购买 nike

使用以下代码,

public Some persist(final Some entity) {
if (flag) {
super.persist(entity);
entity.credentials();
update(entity);
return entity;
}
assert super.persist(entity).equals(entity);
assert entity.credentials().equals(entity);
assert update(entity);
return entity;
}

如果标志为假,则语句似乎被忽略并且不被执行。

正常吗?或者某些断言失败了?

更新

我已经知道如何启用断言。

我想知道的是,无论是否启用 -ea 选项,整个 assert ... 语句都会被忽略。

更新

我正在用我的 spring 库尝试它们,似乎整个语句意味着生成 boolean 标志的代码被忽略。

我想知道的是

  1. 是否唯一忽略断言的功能,或者
  2. 整个语句都会被忽略。

更新

我正在分享我学到的东西。这让我很震惊。

public Some persist(final Some entity) {

// WORKS!
super.persist(entity);
entity.generate();
update(entity);
return entity;

// WORKS!
final Some persisted = super.persist(entity);
assert persisted.equals(entity);
final Some generated = entity.credentials();
assert generated.equals(persisted);
final boolean updated = update(generated);
assert updated;
return generated;

// DOES NOT WORK!!! SHOULDN'T DO THIS!!!
assert super.persist(entity).equals(entity);
assert entity.generate().equals(entity);
assert update(entity);
return entity;
}

最佳答案

您必须启用断言。断言可以在程序启动时启用或禁用,默认情况下是禁用的。

禁用断言可以完全消除其性能损失。一旦禁用,它们在语义和性能方面本质上等同于空语句。您可能希望在 dev 中动态测试代码,但不希望在不更改任何代码的情况下降低 prod 中的性能。

Is the only the functionality of assertion ignored

我想这就是断言的全部要点,它使您能够测试对程序的假设。

The whole statement are ignored

是的,当编译Java程序时,启用/禁用断言,它会在生成的类文件中进行标记。因此,当类加载器加载文件并运行时,如果断言被禁用,则指令或行将被完全忽略。

关于java - 运行时是否会忽略断言语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47131243/

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