值传递机制

1.基本数据类型传递的是值,所以一方修改对另一方没有影响

public static void main(String[] args) {
        int a=1;
        int b=2;

        a=b;
        System.out.println(a);//2
        System.out.println(b);//2 b的值传递给了a

        b=3;
        System.out.println(a);//2
        System.out.println(b);//3 b值的修改对a没有影响
    }

2.引用数据类型传递的是地址值,所以一方修改对另一个方有影响

public class Test3 {
    public static void main(String[] args) {
        Try try1 = new Try("1");
        Try try2 = new Try("2");
        System.out.println(try1==try2);//false

        try1=try2;
        System.out.println(try1==try2);//true try2的地址赋给了try1
        System.out.println(try1.name);//2
        System.out.println(try2.name);//2  此时name值是同一个

        try2.name="3";
        System.out.println(try1==try2);//true
        System.out.println(try1.name);//3
        System.out.println(try2.name);//3  改变try2的name值,会对try1的值产生影响
    }
}

class Try {

    String name;

    public Try(String name) {
        this.name = name;
    }

}

3.十分特殊的String,String的特殊性来自于其创建方式的特殊性

3.1 String s1=“a”,这种创建方式,栈内存里面s1的名字,会指向常量池里的常量"a",而且"a"在常量池中只存一份

public static void main(String[] args) {
        String s1="a";
        String s2="a";
        System.out.println(s1==s2);//true 他们的都指向了常量池里面的同一个"a"
    }

3.2 String s1 =new String(“a”),这种创建方式,栈内存里面s1的名字,会先指向堆内存里的一个地址,然后该地址会指向常量池里的"a"

public static void main(String[] args) {
        String s1 = new String("a");
        String s2 = new String("a");
        System.out.println(s1==s2);//false 他们的地址不同
    }

3.3 String的+运算,只有完全都是常量的+运算会在常量池中进行,其余的情况都是在堆内存中进行

public static void main(String[] args) {
        String s1 = "a";
        String s2 = "b";

        String s3="ab";

        String s4="a"+"b";
        System.out.println(s3==s4);//true 都是常量在常量池中计算,s3和s4指向常量池中唯一的"ab"

        String s5="a"+s2;
        System.out.println(s3==s5);//false 此时计算是在堆内存中,s5先指向堆内存的一个地址,然后指向常量池中的"ab"

        String s6=s1+s2;
        System.out.println(s3==s6);//false 同s5
        System.out.println(s5==s6);//false s5和s6在堆内存中有不同的地址

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值