美文网首页
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