java值传递和引用传递

数据类型传值:

public class Demo {
	public static void main(String[] args) {
		int i=10;
		int l=i;
		i++;
		System.out.println(l);//10
		System.out.println(i);//11

分析:
Int i=10;
i存放的是数据10,因为基本数据类型开辟空间存放在栈中

int L=i;
L存放的是数据10的地址,L指向i存储数据的地址

i++
L指向i的地址,i的值发生改变,系统会在变量L所在的内存空间开辟一个位置来存放i的没有改变之前的值。
在这里插入图片描述
在这里插入图片描述}
引用数据类型传的参数的地址,引用参数存在堆上面,地址在栈中,引用类的数据传递是存储他的地址。
在这里插入图片描述
因为emp它的地址是指向那个传进来的对象,所以你做的改动是指向传进来的那个对象的地址。之后的emp=new Emp();使其指向了另一个堆空间,将emp与原来的那个传进来的对象的地址断开了。所以之后所做的任何操作都和之前的无关(100 50 50)

class Emp {
    public int age;
}
publ ic class Test {
    public static void change(Emp emp)
    {
        emp.age = 50;
        emp = new Emp();//再创建一个对象
        emp.age=100;
         }
    
    public static void main(String[] args) {
        Emp emp = new Emp();
        emp.age = 100;
        System.out.println(emp.age);
        change(emp);
        System.out.println(emp.age);
        System.out.println(emp.age);
    }
}

总结:
基本数据类型传值,对形参的修改不会影响实参。
String,Integer,double 可以理解为传值,最后不会修改实参对象
引用类型传引用,形参实参指向同一个内存地址(同一个对象),对参数的修改会影响到实际对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值