浅谈引用数据类型

案例一:
public class MathTest1{
    public void main(String[] args){
		Long a = 111L; //假设地址值为x111
		changeNum(a);  //debug1
		System.out.println(a);
    }
    private void changeNum(Long num){
		num = 222L; //debug2
    }
}
最终输出还是"111L"
原因: Long a = 111L声明了一个引用数据类型变量a,并赋值a=111L
调用changeNum()方法,将a的地址值传递过去,但是,注意:
num = 222L; 相当于创建了一个新的引用数据类型222L,产生一个新的地址值,对变量num重新赋值一个新的地址值x222,并没有对地址值x111的值进行修改,因此,最终输出结果111

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

String中的str.replace()方法是一个道理,底层new了一个新的对象,所以使用str.replace()方法后,str还是原来的str,方法的返回值才是替代过的值
对同一个引用数据类型的数据替换,一定是建立在没有产生新的对象的前提下;通常都是比如说user.setId()/user.setUsername()...一类修改属性的方法
案例二:
    public class MathTest2{
        public void main(String[] args){
			Long a = 1111L;
			Long b = a;
			a = 2222L;
			System.out.println("a:"+a);  //2222
			System.out.println("b:"+b);	 //1111
        }
    }
1.首先在堆内存中创建一个对象,值为"1111L",将地址值保存到变量a中;
2.接着将a的地址值又保存到了变量b中;
3.在堆内存中再次创建一个对象,值为"2222L",将地址值重新赋值给变量a;
4.因此,a保存新的数据"2222L"的地址值,而b保存开始的数据"1111L"的地址值

猜你喜欢

转载自blog.csdn.net/qq_42514129/article/details/84421111
今日推荐