zoukankan      html  css  js  c++  java
  • java:字符串的“+”运算

    今天在一篇博客里,意外的看到了一段关于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)最后是一篇博客,作者通过反编译证明了一开始那篇文章的说法。阅读后也是受益匪浅,非常感谢作者的贡献和分享。
  • 相关阅读:
    mongodb的常用操作(二)
    mongodb的常用操作
    OpenBSD内核之引导PBR
    OpenBSD内核之引导MBR
    OpenBSD之开篇
    “索引”、大数据的思考
    flume坑之channel.transactionCapacity和HdfsSink.batchSize
    cocos2d-x的CCAffineTransform相关变换实现原理
    MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集
    “全服单世界”的终极目标即“虚拟世界”
  • 原文地址:https://www.cnblogs.com/YESheng/p/3465419.html
Copyright © 2011-2022 走看看