gpt4 book ai didi

Java:if-return-if-return vs if-return-elseif-return

转载 作者:IT老高 更新时间:2023-10-28 21:15:03 33 4
gpt4 key购买 nike

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

public boolean equals(Object obj)
{
if (this == obj)
return true;

if (obj == null)
return false;

if (getClass() != obj.getClass())
return false;

// Check property values
}

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

public boolean equals(Object obj)
{
if (this == obj)
return true;

else if (obj == null)
return false;

else if (getClass() != obj.getClass())
return false;

// Check property values
}

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

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

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

最佳答案

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

我生成了两个方法 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/

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