逻辑上
while (n-- != 0) {if (v1[i++] != v2[j++]) return false;}是相同的
for (int i = 0; i < n; i++) { if (v1[i] != v2[j]) return false; }}我不确定为什么JVM设计人员会这样做。也许使用while循环比使用for循环可以提高性能。在我看来,它看起来很像C,所以也许写这个的人在c中有背景。
Offset用于定位字符串在char数组中的起始位置。内部字符串存储为char数组。这是
value
if (v1[i++] != v2[j++]) return false;
检查字符串的基础char数组中的字符。
并逐行
如果引用指向同一个对象,则必须等于
1014if (this == anObject) {1015 return true;1016}如果对象是字符串,则检查它们是否相等
1017if (anObject instanceof String) {强制将传入的参数转换为String。
1018 String anotherString = (String)anObject;
记住this.string的长度
1019 int n = count;
如果两个字符串的长度匹配
1020 if (n == anotherString.count) {获取一个字符数组(值是此数组)
1021 char v1[] = value;1022 char v2[] = anotherString.value;
找出字符串在此数组中的开始位置
1023 int i = offset;1024 int j = anotherString.offset;
遍历char数组。如果值不同,则返回false
1025 while (n-- != 0) {1026 if (v1[i++] != v2[j++])1027 return false;1028 }其他所有事情都必须是真的
1029 return true;1030 }1031}
如果不是String类型,则它们不能等于
1032return false;1033 }
要了解偏移量和值,请查看String类
private final char value[];private final int offset;private final int count;
构造函数初始化这些变量。默认的构造函数代码如下。对于其他构造函数,您应该会看到类似的内容。
public String() { this.offset = 0; this.count = 0; this.value = new char[0]; }这是一个很好的链接



