美文网首页
Java 中 String、StringBuffer,Strin

Java 中 String、StringBuffer,Strin

作者: 大川的川 | 来源:发表于2019-03-13 11:28 被阅读0次

可能我们在学习工作中,会经常使用到这三个,但是我们是否真实的认识她们呢?我觉得未必!今天我们就看看她们的特性!

  • String类是项目开发中一定会用到的类,有如下特性:
    1.每个字符串常量都属于一个String类的匿名对象,并不能修改
    2.String 有两个常量池:静态常量池、运行时常量池
    3.String 类对象实例化建议直接赋值的形式完成,这样可以直接将对象保存在对象池中方便下次重复使用

  • String 类最大的弊端:内容不允许修改,说这里大家可能想了,我平时经常修改字符串啊,完全是可以修改的,作者在这里胡说“霸道”,什么情况呢,让我们来看看......

    String _name="大";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        changeName(_name);
        Toast.makeText(this,_name,Toast.LENGTH_LONG).show();
    }
    private void changeName(String temp){
        temp+="川";
    }
String类运行图
  • 看到这里,我们觉得“吐司”会弹出什么信息?“大川” or “大”?是的,吐出来的是“大”,字符串_name的内容根本没有改变,那么现在我们真的希望可以改变_name的内容,怎么办?StringBuffer了解一下:
    StringBuffer并不像String类那样拥有两种实例化方式,StringBuffer必须像普通类那样首先进行对象的实例化,而后才可以调用其方法进行处理,
    StringBuffer _strBF=new StringBuffer("大");
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        changeName(_strBF);
        Toast.makeText(this,_strBF.toString(),Toast.LENGTH_LONG).show();
    }
    private void changeName(StringBuffer temp){
        temp.append("川");
    }
StringBuffer类运行图
  • 通过以上内容我们看到了,String类确实无法改变,然后有可以代替的StringBuffer类,那么StringBuilder又有什么用呢?看看源码我们发现,StringBuilder和StringBuffer的使用方法几乎是一样的!那为什么会存在两个一样的类呢?存在必有价值!一起看一下......
    StringBuilder _strBD=new StringBuilder("大");
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        changeName(_strBD);
        Toast.makeText(this,_strBD.toString(),Toast.LENGTH_LONG).show();
    }
    private void changeName(StringBuilder temp){
        temp.append("川");
    }
源码分析:
  • StringBuffer其函数部分都是用了同步代码块的synchronized关键字
    StringBuffer源码分析
  • StringBuilder 中只是普通的函数
    StringBuilder 源码分析

终上所诉,我们得出了结论:

  • String类是字符串的首选,内容不可修改
  • StringBuffer和StringBuilder的内容可以修改
  • StringBuffer是JDK1.0 提供的,属于线程安全,而StringBuilder是JDK1.5之后提供的,属于非线程安全。

相关文章

网友评论

      本文标题:Java 中 String、StringBuffer,Strin

      本文链接:https://www.haomeiwen.com/subject/kmczpqtx.html