java只有值传递

java只有值传递

在java中不管是基本数据类型,还是引用类型,都只是值传递!

1、基本数据类型

public class Demo {

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

        exchange(a,b);

        System.out.println("a:"+a+"\tb:"+b);
    }

    //实际传进去的是a,b的副本!,所以方法里不管怎么操作都不会影响原来a,b的值!
    private static void exchange(int a, int b) {

        int temp = a;
        a = b;
        b = temp;
        System.out.println("a:"+a+"\tb:"+b);
    }
}

控制台

a:20	b:10
a:10	b:20

2、引用类型

public class Data {

    private int a;
    private int b;

    public static void main(String[] args) {
        Data data = new Data();
        data.a = 10;
        data.b = 20;

        exchange(data);//方法里面的data,一样的只是上面data引用变量的副本!

        System.out.println("a:"+data.a+"\tb:"+data.b);
    }

    private static void exchange(Data dataCopy) {
        //那为什么这里它可以改变对象的值,data是一个引用变量:保存了对象的地址值,dataCopy作为data的副本所以也有该地址值,当然也可以去操作对象了,但是data和dataCopy依旧是两个不同的变量!
        dataCopy.a = 20; 
    }
}

控制台

a:20	b:20

copy:副本的意思!

为了证明data 和 dataCopy不是同一个变量,我把dataCopy赋值为null,假设data和dataCopy是同一个变量,那么执行①处的时候肯定会空指针异常的,如果没有异常也就证明它俩不是同一个变量!
注:其实这里的传值,传的就是地址值!

public class Data {
	
	private int a;
	private int b;
	
	public static void main(String[] args) {
		Data data = new Data();
		data.a = 10;
		data.b = 20;
		
		exchange(data);//方法里面的data,一样的只是上面data引用变量的副本!
		//①
		System.out.println("a:"+data.a+"\tb:"+data.b);
	}

	private static void exchange(Data dataCopy) {
        //为了dataCopy和main方法中的data不是同一个变量,我直接让它不再指向任何有效的地址
		dataCopy = null; 
	}
}

控制台

a:10	b:20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值