gpt4 book ai didi

java - 关于typecast "(String)anObject"和anotherString.value.length的疑问

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:37 26 4
gpt4 key购买 nike

我正在探索我在 equals 方法中遇到的 Java 中的 String API

首先,

if (anObject instanceof String) {
String anotherString = (String)anObject;

即使在检查了对象的 instanceOf String 之后,它已在该条件下进行了类型转换,您能否帮助我理解这一点。

其次,

String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length)

这里为什么我们使用 anotherString.value.length 而不是 anotherString.length

我试过多个来源,例如 JLSHerbert Schildt 的书,但无法真正破译它。请帮助我更好地理解这一点。

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;
}

最佳答案

even after checking instanceOf String for an object it has been typecasted inside that condition, could you kindly help me understand this.

无论 instanceof 检查如何,您都不能将类型为 Object 的值分配给类型为 String 的变量。所以 anObject 必须进行类型转换以确保编译器它没问题。 (至少有一种语言——TypeScript——其编译器能够根据 instanceof 检查推断出赋值是正确的,但 Java 的编译器不会那样做...... yet。 )

Here why are we using anotherString.value.length not anotherString.length

value 是包含实际字符串数据(作为 char[]byte[ ] 数组;在 JDK 1-8 中为 char[],在 JDK 9+ 中为 byte[])。使用 value.length 是有意义的,因为这是数组的长度;如果两个字符串的 value 长度不同,则它们不可能相等。要使用 anotherString.length() 将需要一个毫无意义的方法调用(记住,公共(public) length 是一个方法,而不是一个字段),它无论如何最终都会查看 value.length(加上一些开销,至少在 JDK11 中是这样)。

关于java - 关于typecast "(String)anObject"和anotherString.value.length的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508759/

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