首页 > 解决方案 > String - 为什么在这两种情况下都有不同的返回值

问题描述

为什么字符串和字符串缓冲区有不同的输出

public class ReturnValueFromTryCatchFinally {

    public static void main(String[] args) {
        System.out.println(methodReturningValue());
    }

    static StringBuffer methodReturningValue() {
        StringBuffer buffer = new StringBuffer();
        try {
            buffer.append("aa");
            return buffer;
        }
        catch (Exception e) {
            buffer.append("bbb");
            return buffer;
        }
        finally {
            buffer.append("vvvv");
        }

    }

    static String methodReturningValue1() {
        String buffer = new String();
        try {
            buffer=buffer.concat("aa");
            return buffer;
        }
        catch (Exception e) {
            buffer=buffer.concat("bbb");
            return buffer;
        }
        finally {
            buffer=buffer.concat("vvvv");
        }

    }

}

对于用户定义的对象,它的行为也与字符串相同

标签: javacore

解决方案


在 StringBuffer 情况下,当对象值在 finally 块中发生更改时,它会隐式知道对象的引用,它会自动理解。但是在 String 的情况下,您指向引用然后连接 String,因为 String 是不可变的。


推荐阅读