有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java toUpperCase()方法何时创建新对象?

public class Child{

    public static void main(String[] args){
        String x = new String("ABC");
        String y = x.toUpperCase();

        System.out.println(x == y);
    }
}

输出:true

那么toUpperCase()总是创建一个新对象吗


共 (1) 个答案

  1. # 1 楼答案

    toUpperCase()调用toUpperCase(Locale.getDefault()),仅当必须时,它才会创建一个新的String对象。如果输入String已经是大写,它将返回输入String

    不过,这似乎是一个实现细节。我没有在Javadoc中找到它

    下面是一个实现:

    public String toUpperCase(Locale locale) {
        if (locale == null) {
            throw new NullPointerException();
        }
    
        int firstLower;
        final int len = value.length;
    
        /* Now check if there are any characters that need to be changed. */
        scan: {
            for (firstLower = 0 ; firstLower < len; ) {
                int c = (int)value[firstLower];
                int srcCount;
                if ((c >= Character.MIN_HIGH_SURROGATE)
                        && (c <= Character.MAX_HIGH_SURROGATE)) {
                    c = codePointAt(firstLower);
                    srcCount = Character.charCount(c);
                } else {
                    srcCount = 1;
                }
                int upperCaseChar = Character.toUpperCaseEx(c);
                if ((upperCaseChar == Character.ERROR)
                        || (c != upperCaseChar)) {
                    break scan;
                }
                firstLower += srcCount;
            }
            return this; // <  the original String is returned
        }
        ....
    }