【问题标题】:Which is faster : int comparision vs object comparison哪个更快:int比较与对象比较
【发布时间】:2018-10-15 05:43:49
【问题描述】:

在 JAVA 中,我将 id numbers(int) 分配给我的对象。我想比较给定的对象是否是预期的对象。

我应该使用哪个?哪个更快?

if(civ!=this)

if(civ.id!=id)

编辑:

额外信息:

Class Civ {
int id;

public Civ(int i){
id = i;
 }

public boolean checkIfOther(Civ civ){

这个:

  return (civ.id !=id);

或者这个:

  return(civ !=this);

-

}
}

【问题讨论】:

  • 快不快,它们是两种不同的比较。
  • 为了比较对象,您不能只使用 == 比较它们。用 == 比较对象只比较两个对象在内存中是否相同。您需要覆盖 equals 方法并在该方法中提供您自己的逻辑。
  • 为什么这会得到如此多的反对?
  • @WVrock Premature micro optimization。性能差异是如此之小,你永远不会注意到它。以最有意义的方式编写比较。 --- 另外请注意,除非您保证内存中没有两个对象可以具有相同的id 值,否则比较是不一样的。
  • 错过的分支可能会慢 10-100 倍,因此进行比较的时间几乎无关紧要。

标签: java object optimization int compare


【解决方案1】:

civ != thisciv.id != id 快(稍微几乎绝对是不可察觉的)。但是,请注意,仅当civthiscoreferent 时,两者才相同。看这个例子:

String a = new String("hello")
String b = a;
a == b // true
String c = new String("hello")
a == c // false!

如果你是,例如从数据库加载civ,或者从用户输入构造它,或者以任何其他方式创建它,除了从this 直接分配(反之亦然),第一种方法将失败,因为它们将是两个不同的 - 甚至虽然可能相等 - 对象。如果不确定,请使用id 以确保安全。

【讨论】:

  • 我会将“稍微”替换为“几乎绝对不易察觉”。这是一种优化级别,只有在测量到它是您的应用程序的主要性能瓶颈之一时,才绝对应该尝试。这种情况极有可能永远不会发生。
  • @yshavit:你完全正确。 “稍微”实际上是正确的,但它根本无法传达差异微乎其微的程度。
  • 我总是将其指定为“this”。每个对象创建都会自动获得不同的 id。所以每当有东西使用新文明时,它永远不会有相同的 id。我不确定 id 怎么可能相同,但对象本身却不是,但为了安全起见,我会使用 id。
  • @Amadan,很好的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 2022-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多