首页
学习
活动
专区
工具
TVP
发布

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

Java 编程语言中最大困惑之一就是: java 传递还是引用传递。我在面试中经常会问面试者这个问题,但还是有很多面试者对这个问题理解不是很正确。...他们甚至还可以写出示例代码来验证他们想法,让我们来一起看一看大多数人如何验证“基础类型传递,非基础类型引用传递”这个想法: 基础类型数据作为参数传递 /** * 基础类型数据作为参数传递...下面我们就来说说 Java参数传递到底传递还是引用传递? 首先说下正确答案:Java 参数传递,不管基本数据类型还是引用类型参数,都是传递,没有引用传递!...当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象属性,那么这里到底传递」还是「引用传递」? 答:传递Java 语言参数传递只有「传递」。...我希望上面的解释能消除所有疑问,只需要记住Java 参数传递,不管基本数据类型还是引用类型参数,都是传递,没有引用传递!。

2.2K30

java传递还是引用传递 知乎_调用和引用调用

首先说下我感受,这个题目出很好,但是在 Java 中这个题目有问题(在下面我会解释)。并且,有很多结论 Java 中只有 传递。我认为这样说不够严谨。...当然如果针对 Java 语言本身来讲,Java 中只有 传递,没有引用传递正确。但是如果针对 传递,引用传递定义来说,Java 中还是有引用传递。...然而在 Java 中,没有引用概念,Java 中只要定义变量就会开辟一个存储单元。因此,对 Java 语言来说只有传递,没有引用传递正确。...只针对:传递、引用传递定义我们来分析一下,Java 属于传递还是引用传递。...要想知道 Java 属于传递还是引用传递,这就要从 Java 内存模型聊起了,我们来看基本数据类型与引用类型在内存中存储方式。

77420
您找到你想要的搜索结果了吗?
是的
没有找到

Java中只有传递,没有引用传递

今天,我在一本面试书上看到了关于java一个参数传递问题: 写道 java中对象作为参数传递给一个方法,到底传递,还是引用传递? 我毫无疑问回答:“引用传递!”...,并且还觉得自己对java这一特性很是熟悉! 结果发现,我错了! 答案传递Java中只有传递,没有引用传递!...先来看一个作为程序员都熟悉传递例子: Java代码 ... ......自然,在函数调用之后,num所指向存储单元还是没有发生变化,这就是所谓传递”!传递精髓传递存储单元中内容,而非地址或者引用!...接下来,就来看java对象参数怎么传递: 同样,先给出一段代码: Java代码 ... ...

1.1K90

java学习——java传递和按址传递

大家好,又见面了,我全栈君。 看这篇也可以看一下最新整理文: Java内存管理-Stackoverflow问答-Java还是传引用?...Java语言方法调用只支持参数传递。当一个对象实例作为一个参数被传递到方法中时,参数就是对该对象引用。对象属性可以在被调用过程中被改变,但对对象引用改变不会影响到调用者。...C++和C#中可以通过传引用或传输出参数来改变传入参数,但是在Java中却做不到。 java传递和按址传递引用传递),要明白这两个概念,要理解和按址。...如上例子,第一种可以认为传递,第二种可以认为按址传递引用传递)。知道了这个概念。在进行下面的简单分析。 传递:只有当参数为基本类型变量时候,java这种策略方式传递。...下面通过代码来解释这个例子: package com.dufy.reforvalue; import java.util.Arrays; /** * java传递和按址传递 * 传递

60420

JavaScript 传递 & 引用传递

,或者要比较两个单独对象或数组相等情况,就要比较它们属性元素等,通过循环遍历数组来实现 (2)传递 -- 引用传递 传递(call by value)最常用求值策略:函数形参被调用时所传实参副本...修改形参并不会影响实参。 引用传递(call by reference)时,函数形参接收实参隐式引用,而不再副本。这意味着函数形参如果被修改,实参也会被修改。...说明o和obj同一个对象,o不是obj副本。所以不是传递。 但这样是否说明JS对象是引用传递呢?...如果引用传递,修改形参o,应该影响到实参才对。但这里修改o并未影响obj。 因此JS中对象并不是引用传递。那么究竟对象在JS中如何传递呢?...共享传递 call by sharing 准确说,JS中基本类型传递,对象类型共享传递(call by sharing,也叫对象传递对象共享传递) 该策略重点:调用函数传参时,函数接受对象实参引用副本

3K20

浅析传递引用传递

请看一道选择题 下列关于传递引用传递描述中,正确( )。...A.传递不会改变实际参数数值 B.引用传递能改变实际参数参考地址C.引用传递能改变实际参数内容 D.引用传递不能改变实际参数参考地址 传递指的是在方法调用时,传递参数实参副本...引用传递指的是在方法调用时,传递参数实参引用,也可以理解为实参所对应内存空间地址。...为了便于理解,Java 课本中会经常提到在 Java 应用程序中永远不会传递对象,而只传递对象引用,因此,引用传递对象。...从本质上来讲,引用传递还是通过传递来实现Java语言中引用传递实际上还是传递传递地址)。如图 下图所示。 ?

1.1K10

java传递和引用传递区别

参考链接: 在Java调用和引用调用 java中在参数传递时有2种方式,          一种传递传递指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,...简单来说就是直接复制了一份数据过去,因为直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了,所以java传递数据量很小数据传递,比如java各种基本类型:int,float...代码:  结果:        另外一种引用传递:引用传递其实就弥补了上面说不足,如果每次传参数时候都复制一份的话,如果这个参数占用内存空间太大的话,运行效率会很底下,所以引用传递就是直接把内存地址传过去...,也就是说引用传递时,操作其实都是源数据,这样的话修改有时候会冲突,记得用逻辑弥补下就好了,具体数据类型就比较多了,比如Object,二维数组,List,Map等除了基本类型参数都是引用传递。 ...代码:  结果:  有些文章中写java中所有的传参方式都是传递,这也说得通,无非就是文字游戏,因为无论传递还是引用传递都是把传递过去了,所以就叫传递

82830

传递 vs. 指针传递

传递还是指针传递? 变量赋值有两种方式:传递"指针"传递(指针也常称为"引用")。不同编程语言赋值方式不一样,例如Python"指针"传递,Go传递。...注意,"指针"加了引号,因为它不是真正指针拷贝,见下文分析。 参数传其实也是变量赋值过程,只不过参数函数本地变量而已。...传递意思每次赋值都拷贝内存中完整数据结构对象,这时在内存中会保存两份内容完全相同,但地址不同数据对象。...所以,修改a时不会影响b,修改b时不会影响a。 如果"指针"拷贝语言,则会直接拷贝a中地址并保存到b中。 ?...另一方面,上面的"指针传递"并非真正指针传递,而是引用传递,或者说是地址传递。这就是前文"指针传递"中"指针"都加上了引号原因。

1.2K20

CC++传递地址传递

C/C++传递地址传递有明显不同,下面对他们作个区别: 传递:在调用函数中将原函数拷贝一份过去被调用函数,在被调用函数中对该修改不会影响原函数。...()函数,这个changeNumber()就可以完成修改a任务: 按照我理解,地址传递实际上一种特殊传递,原因如下: 1.main()函数调用changeNumber()时候,将a地址...,两者都可以理解为传递,只不过第二个例子中a地址而已 2.changeNumber()函数被调用之后,它根据传过来地址(请注意,这里说地址,因为地址本身也是一个可见数值),在内存中开辟一块新空间...由于C和C++语法相似性,经过C环境下写出代码,同样符合这个逻辑 之所以写这个东西,是因为看到有博主写了关于Java传递引用传递文章,链接: https://blog.csdn.net/javazejian.../article/details/51192130 刚好最近在学Java,文章所述Java传递引用传递使我对C++传递地址传递理解产生了疑问,一番实验之后终于弄清楚了。

48230

String传递java传参都是传

java中对象作为参数传递给一个方法,到底传递,还是引用传递? String和int参数传递传递还是引用传递?...Java 编程语言只有传递参数。当一个对象实例作为一个参数被传递到方法中时,参数就是该对象引用一个副本。...指向同一个对象,对象内容可以在被调用方法中改变,但对象引用(不是引用副本)永远不会改变。  java传递参数都是,如果对象的话,就是将引用复制一份给方法当参数。...如果跟着步骤一步步走,肯定牢记住了: java所有的参数传递都是传递副本,变量所代表副本!java所有的参数传递都是传递副本,变量所代表副本!...java所有的参数传递都是传递副本,变量所代表副本! 这里必须记住就是副本概念。

2.2K60

JavaScript 如何工作:JavaScript 共享传递传递

传递 和 引用传递参数 主要区别简单可以说: 传递:在函数里面改变传递不会影响到外面 引用传递:在函数里面改变传递会影响到外面 但答案 JavaScript 对所有数据类型都使用传递...它对数组和对象使用传递,但这是在共享传参或拷贝引用中使用传参。这些说有些抽象,先来几个例子,接着,我们将研究JavaScript在 函数执行期间内存模型,以了解实际发生了什么。...传参 在 JavaScript 中,原始类型数据传参;对象类型Java一样,拷贝了原来对象一份引用,对这个引用进行操作。...: 1)第一个通过 setNewString 方法把字符串 str 传递进去,如果学过面向对象语言如C#,Java 等,会认为调用这个方法后 str 为改变,引用这在面向对象语言中 string...因此,检索 0x002233 {number: 90} 。 看看这样答案: 原始数据类型传递,对象通过引用副本传递

3.7K41

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

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

3.2K40

Java传递还是引用传递

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

1.3K10

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

首先把结论表明,Java 参数传递传递,因为有部分细节让人引起误解以为引用传递,故我们写两个例子来举例探讨。...,这个例子中我们把 a 复制一份传递给 add 方法中,形参 b 被赋值 15,当 add 方法执行完最后一行代码,整个方法栈被回收。...传递最大疑问就是为什么这个例子中 Student 实例对象 a 传递到 change 方法中 age 、name 参数被改变了会影响到外面的对象,大家先看一下控制台输出,当我们对形参 b =...c 时,它内存地址确实是改变了,但是并没有影响到外面的 a 对象内存地址,这就充分说明了传递,只不过值得一提,这个传递复制了一份对象,但是里面的参数所引用地址指向一样,重点理解引用数据类型传递的确实是...,但是对象内部参数指向一样数据。

2.8K20

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

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

73520

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

传递和引用传递最大区别是传递过程中有没有复制出一个副本来,如果传递副本,那就是传递,否则就是引用传递。...Java对象传递通过复制方式把引用关系传递了,因为有复制过程,所以是传递,只不过对于Java对象传递传递内容对象引用。...传递和引用传递最大区别是传递过程中有没有复制出一个副本来,如果传递副本,那就是传递,否则就是引用传递。...在Java中,其实是通过传递实现参数传递,只不过对于Java对象传递传递内容对象引用。我们可以总结说,Java求值策略共享对象传递,这是完全正确。...但是,为了让大家都能理解你说,我们说Java中只有传递,只不过传递内容对象引用。这也是没毛病

9510

Java 到底传递还是引用传递

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

50920

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

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

59630
领券