java:字符串的“+”运算
2024-08-26 19:05:08
今天在一篇博客里,意外的看到了一段关于java中对字符串的“+”运算的处理(博客原文:http://blog.csdn.net/yirentianran/article/details/2871417),突然间想到要详细了解下这个知识点,于是从网上找资料学习了一下。
首先罗列下已知的java中字符串连接方式
第一种:使用Stirng类的concat方法
形式:
String c = a.concat(b);
顺便学习了concat的源码,concat的实现方式是这样的
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
} |
第二种:利用StringBuffer(或者StringBuilder)
形式:
StringBuilder st = new StringBuilder();
c = st.append(a).append(b).toString();
第三种:也是最最常用的,“+”运算
形式:
c = a+b;
问题是:java虚拟机是怎么执行这个运算的?“+”代表了什么,是不是映射了某个方法?
首先看下jdk1.6版本中的一个说明:
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是过
StringBuilder
(或StringBuffer
)类及其 append
方法实现的。字符串转换是通过 toString
方法实现的,该方法由 Object
类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的对于java的这个机制,我是一点都不了解,试着从网上百度了一些,发现这个问题还是有不少人感兴趣的,现在就自己总结一下这方面的知识:
(1)在水木社区主站,我找到了一个相同的问题,得知了两点:一是string是编译器有特殊处理的类;二是,在《thinking in java》一书里有提及(查书后发现也只是略有提交,没有详细阐述)。
(2)最后是一篇博客,作者通过反编译证明了一开始那篇文章的说法。阅读后也是受益匪浅,非常感谢作者的贡献和分享。
最新文章
- Spring MVC视图解析器
- hdu 5269 ZYB loves Xor I
- Sping Environment为Null的原因和解决方法
- Python变量作用域(一)
- android sdk manager下载慢可以使用代理信息
- 超大型 LED 显示屏
- Unity中使用RequireComponent,没有添加上组件
- 查找mysql数据库文件的存放位置
- 【PHP】PHP5.4.0版本号ChangeLog具体解释(上)
- Xcode7.3中SKAudioNode";诡异";初始化的解决
- 二, 字符串和编码之 python 格式化
- MySQL MGR+ Consul之数据库高可用方案
- 吴恩达机器学习笔记25-神经网络的模型表示2(Model Representation of Neural Network II)
- MySQL实现排名并查询指定用户排名功能
- css显示display、可见性visibility、定位position、对齐
- opencv的级联分类器(mac)
- POJ 3461 Oulipo(KMP,模式串在主串中出现次数 可重叠)
- eventql部署过程
- VI ORB-SLAM初始化与VINS初始化对比(将vi orb-slam初始化方法移植到vins中)
- chromium对网页获取favicon
热门文章
- HDU 5274 Dylans loves tree(树链剖分)
- java对象的比较分析
- 数据库 BUG:Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=
- 谈如何使用c中的qsort快速排序库函数 按主次关键字正确排序
- ##DAY6 UIScrollView
- 2045不容易系列之(3)—— LELE的RPG难题
- IOS 特定于设备的开发:Info.plist属性列表的设置
- 使用Protel99 SE 拼板的详细图解(新加队列粘贴方法)
- QT窗口拖拽功能简单应用(处理dragEnterEvent和dropEvent事件,不同的事件有不同的信息,比如mimeData)
- 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)