`

如何理解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
分享到:
评论

相关推荐

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

    本文将深入探讨Java中的参数传递机制,并通过具体的代码示例和内存分配图解来帮助读者理解按值传递和按引用传递的概念。 #### 二、按值传递的概念与特点 按值传递是指在函数或方法调用过程中,传递给函数或方法的...

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

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

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

    作为一门广泛使用的编程语言,Java提供了多种参数传递的方式,这其中包括了基本类型的值传递以及引用类型的地址传递。同时,文章还涵盖了可变参数列表(varargs)的使用方法以及如何在方法中正确地定义和使用返回值...

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

    本文将重点讨论Java中方法调用时的基本类型和引用类型参数传递的区别,并通过具体的示例帮助读者更好地理解和掌握这一核心概念。 #### 学习目标 - **理解参数传递的基本原理**:了解Java方法调用过程中如何将参数...

    java参数传递-1_20201207151148.jpg

    java

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

    Java中参数传递的方式有两种理解:值传递和引用传递,但这两种说法实际上是对同一种机制的不同角度的描述。下面将详细解释这两种理解方式。 首先,我们来看值传递的理解。在Java中,当一个对象作为参数传递给方法时...

    java值传递与引用传递

    在Java编程语言中,函数参数的传递方式有两种:值传递和引用传递。理解这两种机制对于编写高效、无误的代码至关重要。以下是对这两种传递方式的详细解析。 首先,值传递是指函数调用时,实际参数的值被复制一份传给...

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

    在Java编程语言中,了解值传递和引用传递的概念至关重要,因为它们直接影响到函数参数的处理方式。下面将详细探讨这两个概念及其区别。 首先,我们来理解什么是值传递。在Java中,基本数据类型(如int、double、...

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

    无论将Java的参数传递称为"值传递"还是"引用传递",重要的是要明白对象的引用不会改变,但对象的内容可以在方法中被修改。这种机制使得Java的代码更安全,避免了不必要的副作用,同时也提供了灵活的编程模型。

    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...

    Java的引用和函数参数传递

    ### Java的引用与函数参数传递详解 #### 一、Java中的引用基础 在Java中,对象的引用扮演着类似于其他编程语言(如C/C++)中指针的角色,但是Java的引用比传统的指针更加安全且易于管理。这是因为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参数传递PPT

    Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递中,函数或方法接收的是原始数据类型(如int、double、boolean)参数的副本。例如,如果有一个方法...

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

    Java中,无论是值类型还是引用类型,在作为方法参数传递时,都遵循着一种被称为“按值传递”的机制。这意味着,当我们将一个变量作为参数传递给方法时,实际上传递的是该变量的一个副本。 ##### 1. 值传递 - **原理...

    java参数传递

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

    Java参数传递的经典示例

    在Java中,参数传递主要有两种方式:值传递(Value Passing)和引用传递(Reference Passing)。虽然Java官方文档并未明确提及引用传递,但Java中的对象实际上是以引用的方式进行传递。 首先,我们来看基本类型(如...

    Java语言中参数值传递和引用传递比较.pdf

    Java 语言中参数值传递和引用传递比较 Java 语言中参数值传递和引用传递是两种不同的参数传递...因此,在 Java 编程中,理解参数值传递和引用传递的区别是非常重要的,以便正确地使用参数传递方式,避免参数传递错误。

Global site tag (gtag.js) - Google Analytics