`

如何理解java的参数传递--值传递还是引用传递

阅读更多
先申明:java中的参数传递都是值传递,没有引用传递。
值传递的概念:值传递会为所传递的对象(这里的对象不是java里的对象object,而是一般意义上的对象)重新开辟一块空间,于是对所传对象的操作不会影响到原对象。
现象:有种说法是java中基本数据类型作参数是值传递,对象做参数是引用传递,我理解他的想法,在此不做任何评论。
理解:为什么对象做参数也是值传递呢?
分析:对象做参数传递的是对象的引用,暂且可以理解成对象的地址。由于是值传递,那么被传递的对象本身是不会有任何变化的,所以该对象的引用是不会发生任何变化的。
public class Yangkl
{
	public void call(Test t)
	{
		Test t2 = new Test();
		t2.setName("cba");
		t.setName("abc");
		System.out.println(t.name);
		//这里改变了t,也就是t所代表的地址发生了变化,
		//其实是所传对象的引用地址的复制发生了变化,本身对象的引用并没有变
		//也就是说这里的值传递是把Test的引用作为值传递。
		t = t2;
		System.out.println(t.name);
	}
	
	public static void main(String args[])
	{
		Yangkl tYangkl = new Yangkl();
		Test obj = new Test();	
		tYangkl.call(obj);
		System.out.println(obj.name);		
	}
}

结果:abc
     cba
     abc

public class testClone {
	
	public void changeA(A a){
		a.name="b";
	}
	public void changInt(int i){
		i=i*2+100;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		testClone test=new testClone();
		A a=new A();
		a.name="a";
		System.out.println("before change : a.name="+a.name);
		System.out.println("before change : a.hashcode="+a.hashCode());
		test.changeA(a);
		System.out.println("after  change : a.name="+a.name);
		System.out.println("before change : a.hashcode="+a.hashCode());
		int i=1;
		System.out.println("before change : i="+i);
		test.changInt(i);
		System.out.println("after  change : i="+i);
		
		
		A a1=new A();   
		A a2=new A();   
		System.out.println("a1.hashCode="+a1.hashCode()); 
		System.out.println("a2.hashCode="+a2.hashCode()); 
		a1.name="a1";   		
		a2=a1;   
		System.out.println("a1.hashCode="+a1.hashCode()); 
		System.out.println("a2.hashCode="+a2.hashCode()); 
		a2.name="a2";   
		System.out.println("a1.name="+a1.name);   
		System.out.println("a2.name="+a2.name); 
		
	}

}
class A {
	public String name;
}


结果:
before change : a.name=a
before change : a.hashcode=18508170
after  change : a.name=b
before change : a.hashcode=18508170 虽然说a.name不同了,但是引用还是一个引用,所以这里是把引用做为值传递的。
before change : i=1
after  change : i=1
a1.hashCode=17237886
a2.hashCode=8187137
a1.hashCode=17237886
a2.hashCode=17237886
a1.name=a2
a2.name=a2
分享到:
评论

相关推荐

    13.java参数传递之引用传递.zip

    13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....

    Java零基础-参数传递-1.md

    读者将学习Java中方法调用时的参数传递方式,并分别介绍基本类型和引用类型在参数传递过程中的特点和区别。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和...

    Java零基础-参数传递-2.md

    读者将学习Java中方法调用时的参数传递方式,并重点探讨基本类型和引用类型在参数传递过程中的特点和区别。此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 ...

    Java:按值传递还是按引用传递详细解说

    Java:按值传递还是按引用传递详细解说

    java参数传递-1_20201207151148.jpg

    java

    java参数传递时到底是值传递还是引用传递分享.pdf

    java参数传递时到底是值传递还是引用传递分享.pdf

    11.java参数传递.zip

    11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java...

    62.java引用类型的参数传递.zip

    62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....

    58.java参数传递机制.zip

    58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递...

    java参数传递时到底是值传递还是引用传递[归类].pdf

    java参数传递时到底是值传递还是引用传递[归类].pdf

    java 值传递和引用传递的比较

    java 值传递和引用传递的比较区别,包括代码及详解

    java参数传递

    这里详细的说明了,java参数传递的过程,引用传递,值传递

    Java的引用和函数参数传递

    Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递

    java值传递与引用传递

    不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址

    java按值传递还是按引用传递详细解说

    这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解...

    Java参数传递PPT

    关于Java参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。

    Java面向对象值传递和引用传递

    Java面向对象值传递和引用传递Java面向对象值传递和引用传递Java面向对象值传递和引用传递Java面向对象值传递和引用传递

    浅析Java引用类型和方法参数传递

    浅析Java引用类型和方法参数传递,浅析Java引用类型和方法参数传递

    java中只有值传递

    Java中传递对象时传递的并不是对象中的内容, 而是对象的地址。

    Java中的值传递和引用传递

    当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。  值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值  引用传递的特点:方法内部对传...

Global site tag (gtag.js) - Google Analytics