今天在一篇博客里,意外的看到了一段关于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)最后是一篇博客,作者通过反编译证明了一开始那篇文章的说法。阅读后也是受益匪浅,非常感谢作者的贡献和分享。

最新文章

  1. Spring MVC视图解析器
  2. hdu 5269 ZYB loves Xor I
  3. Sping Environment为Null的原因和解决方法
  4. Python变量作用域(一)
  5. android sdk manager下载慢可以使用代理信息
  6. 超大型 LED 显示屏
  7. Unity中使用RequireComponent,没有添加上组件
  8. 查找mysql数据库文件的存放位置
  9. 【PHP】PHP5.4.0版本号ChangeLog具体解释(上)
  10. Xcode7.3中SKAudioNode"诡异"初始化的解决
  11. 二, 字符串和编码之 python 格式化
  12. MySQL MGR+ Consul之数据库高可用方案
  13. 吴恩达机器学习笔记25-神经网络的模型表示2(Model Representation of Neural Network II)
  14. MySQL实现排名并查询指定用户排名功能
  15. css显示display、可见性visibility、定位position、对齐
  16. opencv的级联分类器(mac)
  17. POJ 3461 Oulipo(KMP,模式串在主串中出现次数 可重叠)
  18. eventql部署过程
  19. VI ORB-SLAM初始化与VINS初始化对比(将vi orb-slam初始化方法移植到vins中)
  20. chromium对网页获取favicon

热门文章

  1. HDU 5274 Dylans loves tree(树链剖分)
  2. java对象的比较分析
  3. 数据库 BUG:Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=
  4. 谈如何使用c中的qsort快速排序库函数 按主次关键字正确排序
  5. ##DAY6 UIScrollView
  6. 2045不容易系列之(3)—— LELE的RPG难题
  7. IOS 特定于设备的开发:Info.plist属性列表的设置
  8. 使用Protel99 SE 拼板的详细图解(新加队列粘贴方法)
  9. QT窗口拖拽功能简单应用(处理dragEnterEvent和dropEvent事件,不同的事件有不同的信息,比如mimeData)
  10. 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)