值传递与引用传递

Java中的变量

J a v a Java Java是一个纯的面向对象的编程语言,但是仍然保留了 8 8 8个基础数据类型 ( b y t e ,   s h o r t ,   i n t ,   l o n g ,   f l o a t ,   d o u b l e ,   c h a r ,   b o o l e a n ) (byte,\,short,\,int,\,long,\,float,\,double,\,char,\,boolean) (byte,short,int,long,float,double,char,boolean),因此 J a v a Java Java中的变量也分为普通变量和引用变量。

普通变量

J a v a Java Java中的普通变量就是 8 8 8 个基础数据类型中的一种,直接声明即可。

int a = 1;
char c = 'a';
boolean f = true;

引用变量

Java中除了基础数据类型外的变量都是引用变量,指向一个对象或者为 n u l l null null J a v a Java Java中的引用变量可以理解成 C 、 C + + C、C++ CC++ 中的指针。

值传递和引用传递

J a v a Java Java 中调用方法时,传递的参数都是值传递。值传递和引用传递的区别是前者传递的是原来变量的复制值,而引用传递传递的是变量本身。怎么理解呢?下面举个例子说明:

public class TEST{
	public static void main(String[] agrs){
		int a = 0;
		func(a);
		System.out.println(a);
	}

	private void func(int a){
		a = 1;
	}
}

上述例子中 m a i n main main 方法打印出的是 0 0 0,说明传递到方法 f u n c func func 里的是 a a a 的复制值,因此在 f u n c func func 中的修改没有影响到 m a i n main main 方法中的 a a a
但是下面这个例子是不是有影响呢?

public class TEST{
	public static void main(String[] agrs){
		int[] a = new int[] {0};
		func(a);
		System.out.println(a[0]);
	}

	private void func(int[] a){
		a[0] = 1;
	}
}

打印出的是 1 1 1,可能有人会问,这不是引用传递吗?在 f u n c func func 里对 a a a 的改变影响了 m a i n main main 中的 a a a !对吗?首先,在 f u n c func func 里并不是对 a a a 做了改变,而是对 a a a 所指向的对象做了改变,对 a a a 做改变应该是这样的:

public class TEST{
	public static void main(String[] agrs){
		int[] a = new int[] {0};
		func(a);
		System.out.println(a[0]);
	}

	private void func(int[] a){
		a[0] = new int[] {1};
	}
}

在这个例子中打印出的是 0 0 0,在 f u n c func func 里对 a a a 的改变没有影响到 m a i n main main 里的 a a a 。而且, f u n c func func 里的 a a a 的确是 m a i n main main 里的 a a a的复制而不是本身,当程序运行到 f u n c func func里时,实际上是有两个引用变量,一个是 m a i n main main 里的 a a a,一个是它的复制。所以在 J a v a Java Java 中,方法里的参数传递都是值传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值