sách gpt4 ăn đã đi

Java:if-return-if-return so với if-return-elseif-return

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 21:15:03 36 4
mua khóa gpt4 giày nike

询问 unrelated question我有这样的代码:

public boolean equals(Object obj)
{
if (this == obj)
trả về giá trị đúng;

if (obj == null)
trả về false;

if (getClass() != obj.getClass())
trả về false;

// Check property values
}

我收到一条评论,声称这不是最优的,而是(如果我理解正确的话)应该这样做:

public boolean equals(Object obj)
{
if (this == obj)
trả về giá trị đúng;

else if (obj == null)
trả về false;

else if (getClass() != obj.getClass())
trả về false;

// Check property values
}

由于 return 语句,我真的不明白为什么它们中的任何一个应该比另一个更有效或更快。给定一个特定的对象,就我所见,这两种方法都必须进行相同数量的检查。并且由于 return 语句,它们中的任何一个都不会运行额外的代码。

我在这里遗漏了什么吗?有什么关系吗?是否有一些编译器优化或发生了什么?

我知道这是微优化,我很可能会坚持第一种方式,因为我认为所有 if 都在同一位置时看起来更简洁。但我无能为力;我很好奇!

câu trả lời hay nhất

这两种情况生成的字节码是相同的,所以这纯粹是风格问题。

我生成了两个方法 e1e2 并且都生成了这个字节码(使用 javap -v 读取):

public boolean e1(java.lang.Object); Code: Stack=2, Locals=2, Args_size=2 0: aload_0 1: aload_1 2: if_acmpne 7 5: iconst_1 6: ireturn 7: aload_1 8: ifnonnull 13 11: iconst_0 12: ireturn 13: aload_0 14: invokevirtual #25; //Method java/lang/Object.getClass:()Ljava/lang/Class; 17: aload_1 18: invokevirtual #25; //Method java/lang/Object.getClass:()Ljava/lang/Class; 21: if_acmpeq 26 24: iconst_0 25: ireturn

我省略了我在之后放置的代码以使其编译。

关于Java:if-return-if-return vs if-return-elseif-return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663447/

36 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress