JAVA中的参数传递原则

JAVA中的参数传递全是以值传递的

总的来说,简单概括Java中进行方法调用的时候传递参数时,遵循值传递的原则:
1)基本数据类型,传递的是数据的拷贝 。“值传递”,在这种方式下,被调用对象对新数据的改变不影响源数据的取值,如基本类型的传递


//例1

void method1(){
int x=0;
this.change(x);
System.out.println(x);
}

void int change(int i){
i=1;
}

结果:x=0;


2)引用数据类型,传递的是传递的引用地址的拷贝,而不是该对象本身 。被调用对象新数据的改变影响源数据内容,因为新数据和源数据的引用虽然不同但却指向同一数据对象,如类型对象的传递。

void method1(){
StringBuffer x=new StringBuffer("Hello");
this.change(x);
System.out.println(x);
}

void int change(StringBuffer i){
i.append(" world!");
}

结果:x=Hello world;


String是一个比较特殊的数据类型,在Java中,String是一个类,但是他的传值却是采用“值传递”的方式。
首先String不属于8种基本数据类型,String是一个对象。

 

 

3.深刻理解引用传递

package AsbstractFactory;

public class Test {

	public static void change(StringBuffer i) {
		//i值这时和x一样,都指向同一个对象
		System.out.println("i值这时和x一样,都指向同一个对象---"+i);
		//i和x指向的那个对象值发生变化
		i.append(" world!");
		System.out.println("i和x指向的那个对象值发生变化--"+i);
		//i指向的地方和x不在一样   i=null将i这个引用指向了内存中一个空地址(没任何东西,null)
		i=null;
		System.out.println(i);
		//在堆内存中建新的对象,指向i指向这个新地址
		i=new StringBuffer("i指向新的对象");
		System.out.println(i);
		
	}

	public static void main(String[] args) {

		StringBuffer x = new StringBuffer("Hello");
		change(x);//引用数据类型,传递的是传递的引用地址的拷贝
		System.out.println("输出的还是x指向对象的值----"+x);//输出的还是x指向对象的值,x应用对象的值被改变了一次	
	}

}


结果:

i值这时和x一样,都指向同一个对象---Hello
i和x指向的那个对象值发生变化--Hello world!
null
i指向新的对象
输出的还是x指向对象的值----Hello world!

 

相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页