zoukankan      html  css  js  c++  java
  • String与StringBuffer

    先看下面的例子:

     1 public class Test {
     2     /**
     3      * @param args
     4      */
     5     public static void main(String[] args) {
     6         StringBuffer sb = new StringBuffer("buffer");
     7         String s = new String("string");
     8         System.out.println(sb);System.out.println(s);
     9         
    10         update(sb);
    11         update(s);
    12         System.out.println(sb);
    13         System.out.println(s);
    14     }
    15     
    16     public static void update(Object obj){
    17         if(obj instanceof StringBuffer){
    18             StringBuffer sb = (StringBuffer)obj;
    19             sb.append("successful");
    20         }
    21         else if(obj instanceof String){
    22             String sb = (String)obj;
    23             sb += "successful";
    24         }
    25     }
    26 }

     输出的结果为:

     buffer

    string

    buffersuccessful

    string

    查看源码后我们可以了解到如下事实:String进行的操作都需要改变地址;然而StringBuffer的操作首先会判断原来分配的地址空间是否够用,不够用的话就动态的分配地址空间 ,它的引用地址是不会发生改变的。(注意:一般除了基本类型之外的类型都是引用,对象作为参数后会随着所调用方法中的修改而变动,而String比较特殊,他每次都会改变地址)

    StringBuffer继承了类AbstractStringBuilder,下面是一个它的构造函数:

     1 public AbstractStringBuilder append(String str) {
     2     if (str == null) str = "null";
     3         int len = str.length();
     4     if (len == 0return this;
     5     int newCount = count + len;
     6     if (newCount > value.length)
     7         expandCapacity(newCount);
     8     str.getChars(0, len, value, count);
     9     count = newCount;
    10     return this;
    11     }
  • 相关阅读:
    ELK7.X中配置x-pack
    ELK报错及解决方案
    ELK + filebeat集群部署
    CentOS7.6中 KVM虚拟机内存、CPU调整
    Linux 设置定时清除buff/cache的脚本
    Nginx中配置https中引用http的问题
    使用Docker搭建Jumpserver堡垒机
    CenterOS7中解决No package mysql-server available.
    Tomcat启动慢的原因及解决方法
    记录 之-- java 的一些小技巧
  • 原文地址:https://www.cnblogs.com/kelin1314/p/1503864.html
Copyright © 2011-2022 走看看