、String.equals
道具String.equals実装
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
などの反復は二つの動作使用しない理由 - i
をインクリメントし、代わりにそのような何かのn
をデクリメント:
while (i < n) {
if (v1[i] != v2[i])
return false;
i++;
}
または
をwhile (i-- != 0) {
if (v1[i] != v2[i])
return false;
}
1つのインクリメントtまたは減少操作?
JVMのバイトコードの最適化とは何とか関係していますが、その仕組みはわかりません。
[関連] [関連](http://stackoverflow.com/q/12661335/1743880) – Tunaki
@Thiloそうです。その点を逃した。 – SubOptimal
これは何らかの巧妙な最適化(どのように見えないか)の場合、 'Arrays.equals'に使用しないことに決めたものです。 'Arrays.equals'は明白な' for'ループを使います。 –