java传值调用和引用调用,java的方法调用采用按值传送方式

  java传值调用和引用调用,java的方法调用采用按值传送方式

  

目录

一、为什么按值调用,按引用调用?第二,按值调用III。通过引用调用IV。为什么Java中只有按值调用,没有按引用调用?v . Java中的引用调用,但是怎么做呢?六。Java对象参考VII。结论

 

  00-1010方法或函数可以通过两种方式调用。一个是按值调用,一个是按引用调用。这两种方式通常根据作为输入或参数传递给它们的值的类型来区分。

  在我们开始之前,让我澄清一件事,在只有按值调用(值传递),没有按引用调用.的爪哇

  00-1010按值调用是一种通过复制给定变量(或常数或任何保存数据的对象)的实际值将参数传递给函数的方法

  这意味着当我们调用传递参数值的方法时,这个参数值将被复制到内存的一部分(取决于类型),并且该值的副本将被传递给调用方法的参数。

  在Java中,只按值调用,不按引用调用。

  

一、为什么按值调用和按引用调用?

引用调用是将值的引用(即地址)传递给方法的方法。

 

  这意味着当我们通过将引用的副本(即地址)传递给它的值而不是值本身的副本来调用这个方法时,调用方法拥有该值的引用(即地址)。

  当调用方法来更改值的引用时,原始引用也会更改。

  

二、按值调用

根据定义,引用调用是我们传递这个变量的引用(即地址)的地方。为此,我们需要首先存储地址,这将需要一个指针(在C中,它作为*variableName传递)。我们知道,在java中,我们没有指针,所以不可能传递引用(即地址)并进行逐个引用的调用。

 

  Java不支持指针,这也是Java不支持引用调用的原因。但是,C/C支持指针,所以这些语言支持引用调用。

  你可能会问,为什么Java不支持指针?嗯,这又是一个有争议的话题。我们可以在其他文章中讨论它,直到我们查看这个stackoverflow页面作为参考,它会给你一些关于它的想法。

  但是,我们仍然可以借助对象行为在Java中实现引用调用。

  

三、引用调用

Java总是使用按值调用。这意味着该方法获得所有参数值的副本,并且该方法不能修改传递的变量的内容。Java使用两个方法参数:

 

  Java基本类型Java对象引用它看起来非常简单明了,就像把一个基本类型传递给一个方法一样。但是当向这个方法传递一个对象时,这是非常明显的。当一个对象被传递给一个方法时,该方法将获得该对象引用的一个副本,并且原始副本和正式副本都引用同一个对象,因此在调用该方法时可以改变对象参数的状态。

  让我们通过一个例子来进一步了解以上两个方法参数。

  将Java原始数据类型作为参数传递给方法。

  对于原始数据类型参数,原始值不变。让我们举一个简单的例子:

  public class PrimitiveDataInAction { public static void main(String[]args){ int some value=50;System.out.println(Before方法调用: some value);已修改(some value);System.out.println(在方法调用: someValue 之后);} public static void modified(int some value){ system . out . println( exiting name : some value);//修改参数someValue=15System.out.println(修改名称: some value);} }输出:

  方法调用前: 50退出名称: 50修改后的名称: 15方法调用后: 50

  进程结束,退出代码为0

  当您将原始数据类型变量传递给方法时,它将创建该方法的本地副本,并执行该方法中提到的任何操作。一旦这个变量从这个方法中出来,这个方法的本地副本将从内存中删除。

  调用此变量之前加载的上一个值。

  

四、为什么Java中只有按值调用,没有按引用调用?

 

  对于Java对象引用类型的按值调用,会更改原始值。

  让我们举一个简单的例子:

  

class JavaObjectReferencesInAction { public static void main(String[] args) { List <String> listOfString = new ArrayList < > (); listOfString.add("Mahesh"); System.out.println("Before modified :: " + listOfString); modified(listOfString); System.out.println("After modified :: " + listOfString); } public static void modified(List < String > listOfString) { // modifying the string listOfString.add("Imran"); }}

输出:

 

  

Before modified :: [Mahesh]exiting listOfString :: [Mahesh]modified listOfString :: [Mahesh, Imran]After modified :: [Mahesh, Imran]

 

  Process finished with exit code 0

  

让我们看看它是如何工作的。

 

  在上面的示例中,我们创建了一个ArrayList对象,并在其中添加了一个字符串值Mahesh。现在列表中的数据是一个字符串,值为Mahesh

  在下一行中,我们调用了modified方法,该方法获取一个列表,并向同一给定列表中添加一个字符串Imran

  但是当我们调用这个修改过的方法时,Java对象引用代替了值。它传递list的引用,list只是list的实际对象

  这也会导致修改原始列表。

  

 

  

七、结论

我们详细讨论了一个棘手的面试问题,即Java中的按值调用和按引用调用。对于初学者来说,这可能需要消化很多东西,但相信我,一旦你开始玩它,它就会在你的脑海中清晰地浮现出来。

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: