java - 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");
}
}
}
对于用户定义的对象,它的行为也与字符串相同
解决方案
在 StringBuffer 情况下,当对象值在 finally 块中发生更改时,它会隐式知道对象的引用,它会自动理解。但是在 String 的情况下,您指向引用然后连接 String,因为 String 是不可变的。
推荐阅读
- asp.net - RDLC 导出为 pdf - IDAutomation 字体未嵌入 Windows Server 2019
- windows - 为什么此命令无法通过 SSH 在 Windows 上运行?
- java - java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()L
- docker - 无法从 docker 容器连接到机器的本地主机
- r - 添加试用列,按主题分组并带有索引
- angularjs - DOMException: 无法读取请求的文件,通常是由于在获取对文件的引用后发生的权限问题
- html - 文本的轮廓描边
- node.js - 如何将 Angular 8 项目部署到服务器 cpanel
- ios - 如何在键盘上方实现搜索栏
- algorithm - 在各种数字范围内查找数字可实现的最佳时间和空间复杂度是多少?