A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String类源码分析 -- by maxwell

今天把String类的源码看了一遍,该类大概2000多行代码,注释就有1000多行。这个类主要都是对char[]的操作。
我大概注释了60%左右的方法,重要的方法做了分析注释,对这些方法也算有了比较深刻的认识。

//将此 String 中的所有字符都转换为小写。
//实际调用的重载方法,该实现相当复杂,因为该方法考虑的各种语言环境
public String toLowerCase() {
        return toLowerCase(Locale.getDefault());
}

//将此 String 中的所有字符都转换为大写。
//实际调用的重载方法,该实现相当复杂,因为该方法考虑的各种语言环境
public String toUpperCase() {
        return toUpperCase(Locale.getDefault());
}

//去除字符串两端的空格
//这个思路很经典!
public String trim() {
        int len = value.length; //尾指针
        int st = 0; //头指针
        char[] val = value;    /* avoid getfield opcode */
        //st<len 保证头指针一直在尾指针之前
        while ((st < len) && (val[st] <= ' ')) { //如果开始为空格
                st++; //头指针向后移动
        }
        while ((st < len) && (val[len - 1] <= ' ')) { //如果末尾为空格
                len--; //尾指针向前移动
        }
        return ((st > 0) || (len < value.length)) ? substring(st, len) : this; //String类中用了很多三元运算符
}

//将此字符串转换为一个新的字符数组。
//这里可以看到直接使用了System.arraycopy()方法
public char[] toCharArray() {
        // Cannot use Arrays.copyOf because of class initialization order issues
        char result[] = new char[value.length];
        System.arraycopy(value, 0, result, 0, value.length);
        return result;
}

//使用指定的格式字符串和参数返回一个格式化字符串。
//注意:这里有可变参数。实际上可变参数是一个数组。
public static String format(String format, Object... args) {
        return new Formatter().format(format, args).toString();
}

//返回 Object 参数的字符串表示形式。
//下面一系列的valueOf()方法,实现方式基本都是使用包装类的toString()方法,或直接使用String的构造方法。
//下面的方法都是静态的,所以可以直接使用类名调用!
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
}

public static String valueOf(float f) {
        return Float.toString(f);
}

public static String valueOf(double d) {
        return Double.toString(d);
}

public static String valueOf(int i) {
        return Integer.toString(i);
}

public static String valueOf(long l) {
        return Long.toString(l);
}

public static String valueOf(boolean b) {
        return b ? "true" : "false";
}

public static String valueOf(char c) {
        char data[] = {c};
        return new String(data, true);
}

public static String valueOf(char data[]) {
        return new String(data);
}


1 个回复

倒序浏览
赞一个。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马