Java的传值与传址

在学Java时我们肯定多少都有些疑问:Java的参数传递到底时传值还是传址呢?Java到底能传地址吗?
最佳答案:Java中没有传址(参:Java核心技术 卷一)
Java语言摒弃了C语言的指针,使操作变得简单一些, Java语言中所有参数都是传值, 对象、数组的传递都是变量值的拷贝。

要想清晰的区分Java的传值和传址我们首先最Java的内存进行简单了解

从下面的代码我们大致可以得到下图,声明变量a是在栈内存中开辟存储空间并将整数100存到栈内存,创建St的对象时也在站内存中开辟存储空间,用以保存对象名,而栈内存的变量名用来堆内存中St的对象的引用(即St对象在堆内存的地址),通过这个地址可以直接得到St的对象

class Test{
	public static void main(String[] args){
		int a =100;
		St b=new St();
	}
}
Class St {
	String name;
	Stirng sex;
	int age;
	public St(){
	}
}

Java的传值与传址_第1张图片

测试1

所以可以总结出Java的传值与传址:

只要是基本数据类型都是传值(int、lang、float、double、boolean)
只要是对象数据类型都是传址(String、包装数据类型、类对象、数组等等)。

你可能感兴趣的:(Java的传值与传址)