- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在探索我在 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
我试过多个来源,例如 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
是包含实际字符串数据(作为 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/
最近查看了Java中String类的源码。而且我发现像 XXX.value 经常出现。像这样: public int compareTo(String anotherString) {
我想使用 string.compareTo(anOtherString); 方法比较两个字符串它为我提供了一个奇怪的值...(我需要为每个字符串提供一个 0 到 57 之间的整数值)在以下示例中,第一
我有一行代码似乎将一个字符数组转换为一个字符串 foobar(string("text")+anotherString); foobar 需要一个 std::string 作为参数 我从未见过以这种方
我今天正在写一些代码,当我按住 alt-tab 键切换到另一台显示器上的屏幕以检查某些内容时,我正在中线。当我回头看时,ReSharper 将灰色下方的第 3 行涂上了注释“分配的值未在任何执行路径中
我是一名优秀的程序员,十分优秀!