引用传递示例,以及String类型如何传递的原理-创新互联

问题引入

大家都知道值传递和引用传递,下面我来通过以一个问题和示例来解决引用类型传递的原理

创新互联公司-专业网站定制、快速模板网站建设、高性价比东兴网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式东兴网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖东兴地区。费用合理售后完善,十年实体公司更值得信赖。

  1)先创建了引用类型Person里面有String name 和int age 

  2)new 一个对象,把这个对象的值赋给a,再把a赋给Person类型的b

package classtest1224;

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
主函数
Person a = new Person();
        a.setAge(18);
        a.setName("zzt");
        Person b = a;
        System.out.println("--------------");
        System.out.println(a);
        System.out.println(b);
        System.out.println("--------------");
        System.out.println("接下来改变a的Name看看b的值能不能改变");
        b.setName("慢慢学");
        System.out.println(a);
        System.out.println(b);

思考:将a的值赋值给了b,通过改变b的值能改变a的值吗?

你的结果是这样吗?

Person{name='zzt', age=18}
Person{name='慢慢学', age=18}

测试结果如下

Person{name='慢慢学', age=18}
Person{name='慢慢学', age=18}

是不是挺奇怪的,这就是引用传递具体

可以见下面这张图 

提出问题

所以所有引用类型的值是不是都是这也传递的呢?经过我的学习,除了String类剩下的都是可以的下来就看看String类到底是怎么样的

1.String的字符串池问题
String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1==s2);

比较结果会是怎么样的?true?false?

是内容一样但是地址不一样,所以结果是false吗?

测试结果:true 

我先看了String源码发现底层是final的字符数组,意思就是她的值是不可改变的,那为什么字符串可以进行a+="abc";操作呢?

原因是:每次修改String类型的值都会重新创建一个出来,所以对字符串的操作是非常浪费资源的。但因为java的垃圾回收机制,长时间不用的又会被回收掉!

不多废话了!直接上代码!!!

String c = "abc";
        String d = c;
        System.out.println("改变c看看d的值是否改变");
        c+="d";
        System.out.println(d);

测试结果如下 

通过改变c的值发现d的值并没有改变

原理是:String类型有特定的字符串池,每次改变字符串的值就会向常量池中添加新的字符串,如下如图所示: 

以上是我这篇博客的内容如有不正确的地方希望大家指出!!!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:引用传递示例,以及String类型如何传递的原理-创新互联
链接分享:http://scyanting.com/article/psooc.html