持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
🍊作者简介:少年不想说话,努力长大
🍊往期回顾:String的一些小用法(一)
🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩
书接上文,我们说了String的部分方法,今天我们继续;
getBytes方法
首先说下getBytes方法,将字符串转为字节数组,现在的getBytes会将字符根据系统编码格式进行转换,如果取不到,那么就按照ISO-8859-1编码格式进行转换,这个我觉得这里就了解这么多就行了;
public byte[] getBytes() {
return StringCoding.encode(value, 0, value.length);
}
equals方法
对于equals方法那可就太常见了,但还是要精细讲下,equals的判断分两部分,一个是对象的判断,一个是值的判断,比如我定义了两个String;
String aq = "1234";
String mmn = "1234";
两个值是一样的,所以第二次的复制只是一个对象地址的赋值,而不是又创建了一个新的对象,对于这种情况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;
}
对于equalsIgnoreCase忽略大小写的方法我们不单独说了;它在判断是否相同的时候和equals是类似的,只不过多了一个如果匹配不上会将两个字符转换为大写形式的,然后再进行比较;
compareTo方法
这里compareTo方法我看了一下,和上面的还是差不多的,首先对于两个字符串,取两者的最小长度进行循环,在循环过程中,如果任意的两个字符不一样则会判断两个字符的编码对应的数值,以此返回如果参数字符串等于该字符串,则值为 0;如果此字符串按字典顺序小于字符串参数,则值小于 0;如果此字符串按字典顺序大于字符串参数,则值大于 0,如果都比较完了还是没结果,则就比较长度了,长的为大;这段源码也可以瞅瞅的;
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
可以看到今天的方法都有共同点就是字符的判断,都有字符;侧面说明java和C的属性定义,只不过String对它进行了封装🥗🥗🥗;
结束结束,那就🛴🛴🛴
如果对你有所帮助
点个赞呗