String源码分析
2021/7/9 1:09:29
本文主要是介绍String源码分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
3.String源码分析
1.String类被final修饰,不能有子类
2.String类底层是一个字符数组value,各种方法的操作其实都是对该数组的操作
3.字符串的比较
代码示例
public class Demo08 { public static void main(String[] args) { String str = "test"; boolean test = str.equals("test");//true int test1 = str.compareTo("test");//0 System.out.println(test); System.out.println(test1); str.concat("a"); System.out.println(str);//test } }
equals源码
equals比较的是两个字符串的值,返回true或false
源码解析:
1.如果比较的两个字符串是同一个对象,直接返回true
2.要比较的对象是否是字符串,不是字符串,返回false,是字符串时将要比较的对象强转为String,然后比较两个字符串的长度,长度不一样返回false,长度一样的依次比较每个字符,所有字符都一样返回true,否则返回false
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; }
compareTo源码
compareTo比较的是两个字符串的值,返回值为数值。如果两个字符串相同,返回0,前面的字符串大于参数中的字符串返回大于0的数值,前面的字符串小于参数中的字符串返回小于0的数值。
源码解析:
compareTo按照两个字符串的最小长度依次比较字符做减法,如果都相同,长度相减
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; }
4.String类的concat()拼接方法,是创建一个新的字符数组,来存放原数组的内容和要拼接的内容,然后以该新数组创建一个新的字符串
concat源码: public String concat(String str) { int otherLen = str.length(); if (otherLen == 0) { return this; } int len = value.length; char buf[] = Arrays.copyOf(value, len + otherLen); str.getChars(buf, len); return new String(buf, true); }
这篇关于String源码分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南