首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java是"通过引用传递"还是"传递价值"?

Java中的参数传递是"传递价值"。在Java中,参数传递是通过值传递的方式,而不是引用传递。当我们将一个对象作为参数传递给方法时,实际上传递的是对象的引用值的拷贝,而不是对象本身的拷贝。因此,在方法内部,我们可以通过这个引用值来访问和修改对象的状态,但是我们不能改变原始引用变量指向的对象。

例如,在下面的代码中:

代码语言:java
复制
public static void swap(Employee a, Employee b) {
    Employee temp = a;
    a = b;
    b = temp;
}

即使我们在swap方法中交换了ab的值,但是在方法外部,ab的值并不会改变,因为我们只是交换了它们的引用值的拷贝,而不是它们本身的值。

因此,Java中的参数传递是"传递价值",而不是"通过引用传递"。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java传递还是引用传递

1.概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:“传参数就是值传递,传对象就是引用传递”,后面进一步查找了相关资料和文章以后,发现这么理解不正确的...这里先放结论: java中参数的传递可以理解为都是值传递 基础数据类型传递值的拷贝 对象类型共享对象传递传递地址的拷贝 2.形参和实参 要理解参数的传递就必须先理解形参和实参: 形参:就是形式参数...(str); } 3.值传递引用传递与共享对象传递 3.1.值传递引用传递 理解了实参和形参,以及java对应的数据类型,我们就可以理解值传递引用传递了。...引用传递/址传递:方法调用时,实际参数的地址被传递给方法中相对应的形式参数,函数接收的原始值的内存地址。...由于传递地址的拷贝,所以如果你在方法中将这个地址指向了新的对象,实际上没有任何对方法外没有任何作用的,举个例子: java 代码解读复制代码public static void main( String

8410

Java传递还是引用传递

开篇名义,首先就把结论表明--->Java传递还是引用传递起决于传递的参数基本数据类型(int,byte,long等)还是引用数据类型(String和类变量)。 废话不多说,上代码。 ? ?...代码很简单,图一中调用静态方法IntValues(int t),毫无疑问传递值,因为如果引用传递,那么二者打印的值一致的。很明显,a--之后,t的值没有发生改变。...图二也是一样,清晰明了,把方法参数的值赋值给a,然后改变a的值,二者值打印均一致,那是因为t代表的一个堆内存的地址,基本数据类型用=、+=、-=、等等符号代表把右边的值拷贝一份给左边,二者之间不会有联系...,引用数据类型则大大不同,打个比方,它们相当于传递了一把钥匙,大家都能打开同一扇门,即大家都是对同一个堆内存的数据进行操作,而第二次打印不同是因为a变量重新赋值的缘故,地址指向另一块堆内存。

1.3K10
  • Java 参数传递传递还是引用传递

    首先把结论表明,Java 的参数传递传递,因为有部分细节让人引起误解以为引用传递,故我们写两个例子来举例探讨。...12 name小黑 地址为 demo.rzj.com.androiddemo.ExampleUnitTest$Student@1a93a7ca age 1000 name灭霸 相信大部分同学对于Java...传递最大的疑问就是为什么这个例子中的 Student 实例对象 a 传递到 change 方法中 age 、name 参数被改变了会影响到外面的对象,大家先看一下控制台的输出,当我们对形参 b =...c 时,它的内存地址确实是改变了,但是并没有影响到外面的 a 对象的内存地址,这就充分说明了值传递,只不过值得一提的,这个值传递复制了一份对象,但是里面的参数所引用的地址指向一样的,重点理解的引用数据类型传递的确实是值...,但是对象内部的参数指向的一样的数据。

    2.8K20

    Java的参数传递传递还是引用传递

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底传递还是引用传递?    答:按值传递Java 语言的参数传递只有按值传递。...当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 永远不会改变的。...Java的参数传递,不管基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!  ...我们可以看一下microsoft的文档中对按引用传递参数的定义(如下截图): 1、基本数据类型的参数 先来看一下基本数据类型的参数按值传递的例子: TransferTest.java public class...所以,在changeNum()方法调用之后,num所指向的存储单元的值还是没有发生变化,这就是所谓的“按值传递”!按值传递的精髓传递存储单元中的内容,而不是存储单元的引用

    3.3K40

    Java“值传递还是引用传递”?

    Java 中到底“值传递还是引用传递”? ? 回答数很多,点赞数也很多。很快就吸引了我的注意力! 通过我个人对通篇文章的阅读,得出了 3 个普遍被大家误导的错误!...错误1:值传递引用传递,区分的条件传递的内容,如果个值,就是值传递。如果引用,就是引用传递。 错误2:Java 引用传递。...错误3:传递的参数如果普通类型,那就是值传递,如果对象,那就是引用传递。 实际上,Java 中只有“值传递”!这并不是我一家之言,而是众多 stackoverflow 上众多网友的讨论的结果!...Java 的工作方式与 C 完全相同。您可以分配指针,将指针传递给方法,按照方法中的指针操作并更改指向的数据。但是,您无法更改指针指向的位置。 Java 总是按值而不是通过引用传递参数。...Java引用的地址当做值进行了传递,这么说,你应该就明白了! 上面我的解释,可能会遇到大家!时间关系,我推荐大家去阅读原文吧。

    76820

    Java 到底传递还是引用传递

    更何况,要想知道Java到底传值还是引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底传值还是引用。...而str引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。...二:搞清楚赋值运算符(=)的作用 num = 20; str = "java"; ? 对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。...(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收) 三:调用方法时发生了什么?参数传递基本上就是赋值操作。...这个数组内部有两个引用(大小为4字节),分别指向两个长度为4的类型为int的数组。 ? 所以当我们传递一个数组引用给一个方法时,数组的元素可以被改变的,但是无法让数组引用指向新的数组。

    53220

    Java到底引用传递还是传递

    引用传递:作为参数传递传递参数本身,当被传递方法改变传递后的变量参数值,原参数也会发生改变。...注意:在C语言里有引用传递这种说法,但是在JAVA里虽然有类似效果但是实质上不存在任何引用传递,我们看到的类似引用传递的效果本质上还是传递,原因下边慢慢看。...通过上面的例子我们已经看到,实现一个改变对象参数状态的方法并不是一件难事。理由很简单,方法得到的对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。...很多程序设计语言(特别是,C++和 Pascal)提供了两种参数传递的方式:值调用和引用调用。有些程序员(甚至本书的作者)认为 Java 程序设计语言对对象采用的引用调用,实际上,这种理解不对的。...通过上面两张图可以很清晰的看出:方法并没有改变存储在变量 s1 和 s2 中的对象引用。swap 方法的参数 x 和 y 被初始化为两个对象引用的拷贝,这个方法交换的这两个拷贝。

    79920

    解惑4:java传递还是引用传递

    一、概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:“传参数就是值传递,传对象就是引用传递”,后面进一步查找了相关资料和文章以后,发现这么理解不正确的...这里先放结论: java中参数的传递可以理解为都是值传递 基础数据类型传递值的拷贝 对象类型共享对象传递传递地址的拷贝 二、形参和实参 要理解参数的传递就必须先理解形参和实参: 形参:就是形式参数...1.值传递引用传递 理解了实参和形参,以及java对应的数据类型,我们就可以理解值传递引用传递了。...引用传递/址传递:方法调用时,实际参数的地址被传递给方法中相对应的形式参数,函数接收的原始值的内存地址。...对于这两种方式,网上有一个非常形象的图: 2.共享对象传递 但是java的传值策略有点类似于两者的结合,共享对象传递: 共享对象传递:先获取到实际参数的地址,然后将其复制,并把该地址的拷贝传递给被调函数的形式参数

    63930

    JavaJava传递还是引用传递的?

    对于Java的初学者来说值传递引用传递一个容易混淆的概念,很多时候调用方法传入参数运行方法后的结果与自己享的不一致。那么Java到底如何传参的呢?...简介 值传递: 在值传递中,函数接收到的参数的值的副本,而不是参数本身。 当你向函数传递一个参数时,函数会创建一个新的变量,并将传递给函数的值复制到这个新变量中。...值传递常见于基本数据类型(如整数、浮点数、布尔值等)的传递引用传递: 在引用传递中,函数接收到的参数的引用(地址)而不是参数的值的副本。...引用传递常见于复杂数据类型(如数组、对象、类实例等)的传递。 多数情况下,引用传递可以节省内存空间,并且可以避免复制大量数据。...结论 在Java按照值传递的方式,只不过参数不同的类型可能会出现不同的结果。 希望我的解答能够为您提供帮助,喜欢的话希望给博主一个关注

    25910

    Java基础】 Java传递还是引用传递

    Java对象的传递通过复制的方式把引用关系传递了,因为有复制的过程,所以是值传递,只不过对于Java对象的传递传递的内容对象的引用。...也就是说,堆空间实际上存放的new User()的相关内容,而userJava对堆空间中这个地址的引用。...类的元数据类的结构定义:这包括了类的名称、其直接父类、实现的接口、类的访问级别(public、private等)、类还是接口或枚举等信息。...在Java中,其实是通过传递实现的参数传递,只不过对于Java对象的传递传递的内容对象的引用。我们可以总结说,Java中的求值策略共享对象传递,这是完全正确的。...但是,为了让大家都能理解你说的,我们说Java中只有值传递,只不过传递的内容对象的引用。这也是没毛病的。

    12910

    Java的参数传递「按值传递还是「按引用传递」?

    Java 编程语言中最大的困惑之一就是: java 按值传递还是引用传递。我在面试中经常会问面试者这个问题,但还是有很多面试者对这个问题的理解不是很正确。...这个时候很多同学通过以上两个示例验证,自己就得出了自己的结论: 如果传递类型为基础数据类型,则按值传递,否则为按引用传递。 在此说明,这个理解错误的,错误的,错误的。...下面我们就来说说 Java中的参数传递到底按值传递还是引用传递? 首先说下正确的答案:Java 的参数传递,不管基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!...当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底「按值传递还是「按引用传递」? 答:按值传递Java 语言的参数传递只有「按值传递」。...我希望上面的解释能消除所有疑问,只需要记住Java 的参数传递,不管基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!。

    2.5K30

    面试:Java 到底传递还是引用传递

    更何况,要想知道Java到底传值还是引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底传值还是引用。...而str引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。...(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收) 三:调用方法时发生了什么? 参数传递基本上就是赋值操作。...数组类型引用和对象: 当我们声明一个数组时,如int[] arr = new int[10],因为数组也是对象,arr实际上引用,stack上仅仅占用4字节空间,new int[10]会在heap中开辟一个数组对象...这个数组内部有两个引用(大小为4字节),分别指向两个长度为4的类型为int的数组。 所以当我们传递一个数组引用给一个方法时,数组的元素可以被改变的,但是无法让数组引用指向新的数组。

    27840

    说说Java到底传递还是引用传递

    01、值传递 VS 引用传递 首先,我们必须要搞清楚,到底什么传递,什么引用传递,否则,讨论 Java 到底传递还是引用传递就显得毫无意义。...而当一个参数按照引用传递的方式在两个方法之间传递时,调用者和被调用者其实用的同一个变量,当该变量被修改时,双方都是可见的。...Java 程序员之所以容易搞混值传递引用传递,主要是因为 Java 有两种数据类型,一种基本类型,比如说 int,另外一种引用类型,比如说 String。...03、引用类型的参数传递 来看一段创建引用类型变量的代码: Writer writer = new Writer(18, "沉默王二"); writer 对象吗?还是对象的引用?...为了搞清楚这个问题,我们可以把上面的代码拆分为两行代码: Writer writer; writer = new Writer(18, "沉默王二"); 假如 writer 对象的话,就不需要通过 new

    44820

    Java的字符串传递还是引用传递

    Java的字符串传递还是引用传递 这是Java的经典问题。关于stackoverflow,已经提出了许多类似的问题,并且有很多不正确/不完整的答案。如果您考虑不多,问题很简单。...常见的令人困惑的问题 x存储指向堆中"ab"字符串的引用。因此,当x作为参数传递给change()方法时,它仍指向堆中的"ab",如下所示: 因为java传递值,所以x的值对"ab"的引用。...当方法change()被调用时,它将创建一个新的"cd"对象,并且x现在指向"cd",如下所示: 这似乎一个很合理的解释。他们很清楚Java总是按值传递。但是这里有什么问题? 3....Java仅按值传递。将x传递给change()方法时,将传递x值的副本(引用)。方法change()创建另一个对象"cd",并且它具有不同的引用变量x更改其引用(改为"cd"),而不是引用本身。...其次,我们需要确保没有创建新对象并将其分配给参数变量,因为Java仅按值传递

    91920

    多图证明,Java到底传递还是引用传递

    开篇先来曝答案,在 Java 语言中,本质只有值传递,而无引用传递,解释和证明详见正文。 说到值传递引用传递我们不得不提到两个概念:值类型和引用类型。...我们后面的文章会单独讲,记得关注:Java中文社群 3.值传递传递(Pass By Value)指的是方法传参时,传递原内容的副本,因此对副本进行如何修改都不会影响原内容。...4.引用传递 引用传递(Pass By Reference)指的是方法传参时,传递参数本身,因此对参数进行任意修改都会影响原内容。...这是因为,在 Java 语言中本质上只有值传递,也就说 Java 的传参只会传递它的副本,并不会传递参数本身。 前面那个带引号的“引用传递”其实只是传递了它的引用副本,如下图所示: ?...总结 通过本文的内容,我们可以得出:在 Java 语言中只有值传递,方法传参时只会传递副本信息而非原内容。

    60210

    多图证明,Java到底传递还是引用传递

    从 JVM 的层面来讲,所谓的引用类型指,在初始化时将引用生成栈上,而值生成在堆上的这些数据类型,如下图所示: PS:关于包装类为什么引用类型?...我们后面的文章会单独讲,记得关注:Java中文社群 3.值传递传递(Pass By Value)指的是方法传参时,传递原内容的副本,因此对副本进行如何修改都不会影响原内容。...4.引用传递 引用传递(Pass By Reference)指的是方法传参时,传递参数本身,因此对参数进行任意修改都会影响原内容。...前面那个带引号的“引用传递”其实只是传递了它的引用副本,如下图所示: PS:《Java虚拟机规范》中对 Java 堆的描述:“所有的对象实例以及数组都应当在堆上分配”。...,如下图所示: 总结 通过本文的内容,我们可以得出:在 Java 语言中只有值传递,方法传参时只会传递副本信息而非原内容。

    26040

    python中值传递还是引用传递

    python中统一都是引用传递,同时要注意类型属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。...这样我们就能通过操作“a”而改变内存中的“hello world”。...当再赋值给 a 的时候,就好象把 a 这个标签从原来的 sth 上拿下来,贴到其他对象上,建立新的"引用"。 既然Python只允许引用传递,那有没有办法可以让两个变量不再指向同一内存地址呢?...当然其中主要的操作还是地址问题。...) # [1] 当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了

    1.3K10

    Java 函数调用时值传递还是引用传递

    Java 中,所有函数调用都是值传递。 值传递:函数调用时,传递的参数不是实参本身,而是把参数复制一份,传递到函数中,传递一份拷贝。...如果参数基本类型/值类型,那么就是把这个类型拷贝一份传到函数中。如果参数引用类型,那么拷贝的不是引用类型自身,而是这个引用的持有者。...引用传递:函数在调用时,传递的参数就是实参本身(C#中的 ref 就是这种模式)。...然后 p 指向另一个对象,这时候,sb 所指向的对象并没有任何改变,所以 sb 的输出还是原来的值。 ? 总结 很多人都喜欢把引用类型的对象传入方法体,然后通过方法中的运算,改变了这个引用对象的值。...因此感觉就好像是把对象传递给了方法,但是这种做法不一定总是正确的,一旦方法中的形参指向了一个新的对象,那么方法体外的对象并不会得到任何改变。

    2.9K00
    领券