关于typecast "(String)anObject" 和 anotherString.value.length 的疑问
Doubts about typecast "(String)anObject" and anotherString.value.length
我正在探索 Java 中的字符串 API 我在 equals 方法中遇到
首先,
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
我尝试了 多个来源,例如 JLS
、Herbert 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
是包含实际字符串数据的 String
对象中的实例成员(作为 char[]
或 byte[]
数组;它是 char[]
在 JDK 1-8 中,它是 byte[]
在 JDK 9+ 中)。使用 value.length
是有意义的,因为那是数组的长度;如果两个字符串的 value
长度不同,则它们不能相等。使用 anotherString.length()
将需要一个无意义的方法调用(请记住,public length
是一个 方法 ,而不是一个字段),这将结束无论如何都要看 value.length
(加上一些开销,至少在 JDK11)。
我正在探索 Java 中的字符串 API 我在 equals 方法中遇到
首先,
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
我尝试了 多个来源,例如 JLS
、Herbert 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
是包含实际字符串数据的 String
对象中的实例成员(作为 char[]
或 byte[]
数组;它是 char[]
在 JDK 1-8 中,它是 byte[]
在 JDK 9+ 中)。使用 value.length
是有意义的,因为那是数组的长度;如果两个字符串的 value
长度不同,则它们不能相等。使用 anotherString.length()
将需要一个无意义的方法调用(请记住,public length
是一个 方法 ,而不是一个字段),这将结束无论如何都要看 value.length
(加上一些开销,至少在 JDK11)。