`

总结Java方法(函数)传值和传引用的问题

    博客分类:
  • Java
 
阅读更多

http://java.chinaitlab.com/base/805647.html

 

java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清。

  (一)基本数据类型:传值,方法不会改变实参的值。

  public class TestFun {

  public static void testInt(int i){

  i=5;

  }

  public static void main(String[] args) {

  int a=0 ;

  TestFun.testInt(a);

  System.out.println("a="+a);

  }

  }

  程序执行结果:a=0 。

  (二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。

  举两个例子:

  (1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

  public class TestFun2 {

  public static void testStr(String str){

  str="hello";//型参指向字符串 “hello”

  }

  public static void main(String[] args) {

  String s="1" ;

  TestFun2.testStr(s);

  System.out.println("s="+s); //实参s引用没变,值也不变

  }

  }

  执行结果打印:s=1

  (2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

  import java.util.HashMap;

  import java.util.Map;

  public class TestFun3 {

  public static void testMap(Map map){

  map.put("key2","value2");//通过引用,改变了实参的内容

  }

  public static void main(String[] args) {

  Map map = new HashMap();

  map.put("key1", "value1");

  new TestFun3().testMap(map);

  System.out.println("map size:"+map.size()); //map内容变化了

  }

  }

  执行结果,打印:map size:2 。可见在方法testMap()内改变了实参的内容。

  (3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :

  public class TestFun4 {

  public static void testStringBuffer(StringBuffer sb){

  sb.append("java");//改变了实参的内容

  }

  public static void main(String[] args) {

  StringBuffer sb= new StringBuffer("my ");

  new TestFun4().testStringBuffer(sb);

  System.out.println("sb="+sb.toString());//内容变化了

  }

  }

  执行结果,打印:sb=my java 。

  所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。

  总结:

  第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

  第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

  第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

  呵呵,不知道我说清楚了没有

分享到:
评论

相关推荐

    java中传值与传引用

    在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...

    java中传值还是传引用的的认识

    "java中传值还是传引用的认识" Java 中的参数传递是值传递还是引用传递?这是一个经常引发讨论的问题。在 Java 中,参数传递是按值传递的,也就是说,传递给方法的参数是一个副本,而不是原始值本身。 当一个对象...

    Java中的传值与传引用实现过程解析

    Java中的传值与传引用是Java编程语言中的一种基础概念,它们是Java函数中参数传递的两种方式。 Java中的传值是指函数参数的值被复制到函数内部,在函数内部对参数的修改不会影响原来的参数值。 Java中的传引用是指...

    java的传值与传值后的改变

    理解Java中的传值与传引用对于编写正确且预期的行为代码至关重要。在编写函数时,应清楚地知道参数如何被传递,以及这将如何影响函数的可读性和行为。在实际编程中,合理运用这些知识能帮助避免许多常见的错误和困惑...

    引用类型传值方法

    引用类型的传值行为体现在函数调用和方法参数传递上。当我们把一个引用类型变量作为参数传递给函数时,并不会创建该对象的新副本,而是复制了这个引用。这意味着函数内部对对象的任何修改都会影响到原始对象,因为...

    java及C++中传值传递、引用传递和指针方式的理解.docx

    ### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...

    23.Java对象作为参数传递是传值还是传引用1

    总结起来,Java中对象作为参数传递时,传递的是对象引用的副本,而不是对象本身。这意味着函数可以修改对象的状态,因为它持有相同的引用,但不能改变对象引用指向另一个不同的对象。这种行为与基本数据类型不同,...

    Java的引用和函数参数传递

    通过上述分析,我们可以清楚地了解到Java中引用和函数参数传递的基本概念以及它们的具体应用。了解这些概念对于正确使用Java进行编程非常重要,尤其是在处理复杂的数据结构和对象交互时。希望本文能帮助读者更好地...

    Android NDK底层和java代码相互传值调用(实用经典Demo)

    对于自定义对象,我们需要先定义一个Java类的本地结构体(JNI类型为`jclass`),然后使用`GetObjectClass`获取类引用,`GetMethodID`获取方法ID,最后通过`CallVoidMethod`等函数调用方法。例如,传递一个自定义的`...

    分析java的传值问题

    ### 分析Java中的传值问题 在Java编程语言中,函数调用时参数传递的方式是理解程序行为的关键之一。本文将深入探讨Java中基本类型与引用类型的数据传递机制,并通过具体的示例代码来阐述这两者之间的区别。 #### ...

    Java中参数传值的代码清单.pdf

    总结起来,Java的参数传递机制对于理解和编写程序至关重要,因为它决定了方法是否能够直接修改调用者提供的变量。基本类型参数的修改仅限于方法内部,而引用类型参数则允许对对象的状态进行修改,但不会改变对象的...

    传值传名传地址.zip

    总结起来,理解传值、传名(或传引用)和传地址的异同是编程基础的重要组成部分。它们影响着函数的可读性、效率以及程序的行为。在编写代码时,根据具体需求选择合适的参数传递方式,是提升代码质量的关键。

    Java语言的方法参数浅析

    大多数程序设计语言具有传值调用和传引用调用的两种方法.通过对典型程序的研究与分析可以看出JAVA语言的参数传递总是传值调用的,但是对于基本类型的参数和对象类型的参数来说,参数传递的情况不完全相同.Java语言不能...

    42.传值和传引用.doc-综合文档

    在编程领域,传值和传引用是两种不同的参数传递机制,它们主要应用于函数调用时对参数的处理。本文将详细探讨这两种机制及其在不同编程环境中的应用,以C++、Java、C#等文本编程语言和LabVIEW可视化编程语言为例。 ...

    java及C++中传值传递、引用传递和指针方式的理解

    总结来说,Java只有值传递,这确保了方法不能直接修改对象,只能通过返回值或全局变量间接影响。C++则提供了值传递、引用传递和指针传递,让程序员可以根据需求选择最适合的方式来操作函数参数。值传递确保了函数的...

    python 函数传参之传值还是传引用的分析

    Python不支持像C++或Java那样的纯粹的值传递或引用传递,而是采用了独特的“传对象引用”方式。这种方式结合了值传递和引用传递的特点,但又有所不同。 在Python中,所有的变量都是对象的引用。当我们传递一个变量...

    java类

    ### Java 类:传值还是传引用? 在Java编程语言中,理解变量的传递方式对于编写高效、可维护的代码至关重要。本文将通过一个具体的例子来深入探讨Java中的传值与传引用的区别,并解释如何利用这一特性来更好地管理...

    Java计算机语言函数应用

    Java计算机语言函数应用是编程学习中的重要...以上知识点涵盖了Java函数应用的基础和进阶内容,理解和熟练掌握这些知识点对于提升Java编程能力至关重要。通过不断实践和探索,您将能够编写出高效、可读性强的Java函数。

    Java参数传递PPT

    总结来说,Java参数传递的核心是值传递,但对于对象参数,传递的是对象引用的副本。理解这一点对于避免常见的编程错误至关重要,特别是涉及到对象的状态更改时。因此,当在方法中处理对象参数时,必须谨慎操作,因为...

    动态增删table以及后台传值和弹出窗口父子窗口传值

    在JavaScript中,可以使用window.open()函数创建新窗口,并通过window对象的属性(如opener或parent)来访问父窗口或子窗口的变量和方法。例如,父窗口可以将数据存储在一个全局变量中,子窗口通过引用父窗口的变量...

Global site tag (gtag.js) - Google Analytics