String和StringBuffer的参数传递问题详解

首先仔细的看一下下面的源代码:

public class DemoTestStringBuffer {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        System.out.println("s1:" + s1 + "\ns2:" + s2 );
        change(s1, s2);
        System.out.println("s1:" + s1 + "\ns2:" + s2);
    }

    public static void change(String str1, String str2) { //步骤1,2
        str1 = str2;//步骤3
        str2 = str1 + str2; //步骤4
    }
}

输出结果:
s1:hello
s2:world
s1:hello
s2:world

为什么是这样的结果,我是这样分析的:(下图的数字代表代码中的步骤)

public class DemoTestStringBuffer {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        String s4 = s1+s2;
        String s5 = "hello"+"world";
        System.out.println(s3 == s4);
        System.out.println(s3 == s5);
    }
}

上面代码的结果主要是表达了s1+s2与"hello"+"world"的区别,具体为什么是这样的结果可以看我再文章:java-String类(1)中的解释。根据上面的结果我们再来理解下面的代码。

public class DemoTestStringBuffer {
    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("hello");
        StringBuffer s2 = new StringBuffer("world");
        System.out.println("s1:" + s1 + "\ns2:" + s2 );
        change(s1, s2);
        System.out.println("s1:" + s1 + "\ns2:" + s2);
    }

    public static void change(StringBuffer str1, StringBuffer str2) {
        str1 = str2;
        str2.append(str1);
        System.out.println("change内部str1:"+str1);
    }
}

输出结果:
s1:hello
s2:world
change内部str1:worldworld
s1:hello
s2:worldworld

总结:在引用数据类型的传递时候应该注意特别注意,我们应该避免避免赋值运算符的使用,如果要使用也应该特别注意。

因为String类的特点:String字符串是不可改变的。所以我们在用String作为参数传递的时候可以把String类作为基本的数据类型看待。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从网上复制的,看别人的比较全面,自己搬过来,方便以后查找。原链接:https://www.cnblogs.com/...
    lxtyp阅读 1,377评论 0 9
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,438评论 0 2
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 900评论 1 6
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,191评论 0 7
  • 这周践行总体情况:起伏不大。所有功课在潜移默化中进行并进步着。 1.青蛙及打卡每天进行,并且青蛙根据事情的轻重缓急...
    hoping牧阳阅读 144评论 0 0