`
hjy2099
  • 浏览: 262677 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Java语言中的参数传递详解

    博客分类:
  • JAVA
阅读更多

和其它程序设计语言类似,Java语言的参数传递也分为两种:

    1.按值传递(by value)

    适用范围:8种基本数据类型、String对象

    特点:在内存中复制一份数据,把复制后的数据传递到方法内部

    作用:在方法内部改变参数的值,外部数据不会跟着发生改变

    2.按址传递(by address)

    适用范围:数组、除String以外的其他所有类型的对象

    特点:将对象的地址传递到方法内部

    作用:在方法内部修改对象的内容,外部数据也会跟着发生改变

    基础示例代码:

    public class Test1{
    public static void t1(int n){
        n = 10;
    }
    public static void t2(String s){
               s = "123";
    }
    public static void t3(int[] array){
        array[0] = 2;
    }
    public static void main(String[] args){
           int m = 5;
        1(m);
        System.out.println(m);
        String s1 = "abc";
        t2(s1);
        System.out.println(s1);
           int[] arr = {1,2,3,4};
        t3(arr);
        System.out.println(arr[0]);
    }
   }

 

    按照上面的参数传递规则,该代码的输出结果应该是:5 abc 2.因为int类型是按值传递,所以把参数m传递到方法t1时,相当于又复制了一份m的值,在方法t1内部修改的是复制后的值,所以m的值不变,s1的输出和m类似。而arr是数组,属于按址传递,也就是把arr的地址传递到了方法t3内部,在方法t3内部修改数组中的值时,原来的内容也发生改变。

    以上特性是Java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:

    1.对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现;

    2.对于按值传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。

    示例代码如下:

public class Test2{
    public static int t1(int n){
        n = 10;
        return n;
    }
    public static String t2(String s){
                  s = "123";
                  return  s;
    }
    public static void t3(int[] array){
        //创建新的数组并赋值
        int[] newArray = new int[array.length];
        //数据拷贝
       System.arraycopy(array,0,newArray,0,array.length);
        newArray[0] = 2;
    }
    public static void main(String[] args){
                  int m = 5;
        //重新赋值
        m = t1(m);
        System.out.println(m);
        String s1 = "abc";
        //重新赋值
        s1 = t2(s1);
        System.out.println(s1);
                  int[] arr = {1,2,3,4};
        t3(arr);
        System.out.println(arr[0]);
    }
}

    这样,程序的输出结果就将是:10 123 1.

    在实际的程序开发中,可以根据需要使用类似的结构来进行实现。

    下面再介绍一个参数传递的常见应用,利用参数传递实现返回值,这样的功能在IO类设计的read方法中大量使用。

    示例代码如下:

public class Test3{
    public static void initArray(int[] array){
                  for(int i = 0;i < array.length;i++){
                            array[i] = i;
        }
    }
    public static void main(String[] args){
                  int[] a = new int[10];
        initArray(a);
        for(int i = 0;i < a.length;i++){
                            System.out.println(a[i]);
        }
    }
}

    在该示例代码中,在initArray方法内部修改了数组的值以后,外部数组a的值也会发生改变,间接实现了返回值的效果。当然,在该示例代码中,因为只返回一个参数,所以作用体现的不明显,如果需要返回多个参数时,使用按址传递是一种不错的主意。

转自:http://java.chinaitlab.com/base/772392.html

分享到:
评论

相关推荐

    java中参数传递方式详解

    Java中参数传递方式详解 Java 中参数传递方式详解是 Java 新手入门面临的一个经典的话题。本文意在终结这个话题,Java 中有说法:Java 里面参数传递都是按值传递,怎么理解这句话? 按值传递和按引用传递是来自 ...

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

    在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...

    Java的引用和函数参数传递

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

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

    ### Java零基础-参数传递详解 #### 内容概要 本文旨在深入解析Java语言中的参数传递机制。作为一门广泛使用的编程语言,Java提供了多种参数传递的方式,这其中包括了基本类型的值传递以及引用类型的地址传递。同时...

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

    ### Java零基础-参数传递详解 #### 内容概要 本文旨在深入解析Java语言中的参数传递机制。作为一门广泛使用的编程语言,Java提供了多种处理数据的方法,其中参数传递是函数(方法)间数据交互的基础。本文将重点...

    JNI中C和Java参数传递详细例子

    ### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...

    Java参数传递及值传递实现原理详解

    Java语言中,参数传递是方法调用过程中的一种机制,讲述了Java参数传递及值传递实现原理详解。参数传递有两种方式:按值传递和按引用传递。 1. 按值传递(Call by Value) 按值传递是指将实参的值复制给形参,形参...

    Java语言实用教程

    - **参数传递**:探讨在方法调用中参数是如何传递的。 - **匿名对象**:介绍匿名对象的概念及其应用场景。 #### 六、Java类的高级特性 - **访问权限**:讲解public、private、protected等修饰符的作用。 - **方法...

    浅谈Java中的参数传递问题

    "Java中的参数传递问题详解" Java中的参数传递问题是Java编程语言中一个非常重要的概念,对于初学者和专业开发者都具有重要的参考价值。在这篇文章中,我们将通过示例代码和实践经验,详细介绍Java中的参数传递问题...

    详解java的值传递、地址传递、引用传递

    java是一种面向对象的编程语言,它的参数传递机制是值传递的,而不是地址传递或引用传递。很多开发者对java的值传递和地址传递存在误解,认为java中的基本数据类型是值传递,而对象是地址传递或引用传递。事实上,...

    java中this\super详解

    ### Java中this与super详解 #### 一、引言 在Java编程语言中,`this`和`super`是两个非常重要的关键字,它们在面向对象编程中扮演着至关重要的角色。`this`关键字用于引用当前对象,而`super`则用于访问父类中的...

    String作为形式参数传递给方法的情况

    Java 中 String 作为方法参数的传递机制详解 在 Java 语言中,String 类型的变量作为方法参数时,表现出了...同时,在 Java 中,基本类型和对象类型的参数传递机制是不同的,前者是“值传递”,后者是“引用传递”。

    《Java和Android开发实战详解》第2到5章源代码-by 南邮-陈杨

    5.2.2 类方法的参数传递 81 5.2.3 类方法的返回值 83 5.2.4 值传递与引用传递 84 5.3 类变量和变量作用域 86 5.3.1 Java的类变量 86 5.3.2 Java的变量作用域 87 5.4 递归程序设计 89 5.4.1 递归方法...

    Java中的值传递和引用传递的区别.doc

    在Java编程语言中,了解参数传递的方式对于深入理解程序的行为至关重要。根据传递的数据类型不同,Java中有两种主要的参数传递方式:值传递(Value Passing)和引用传递(Reference Passing)。这两种方式决定了函数...

    JAVA编程实例大全及详解答案(50例)

    本资源"JAVA编程实例大全及详解答案(50例)"显然是为了帮助初学者和有经验的开发者深入理解Java语言并提升编程技能。通过50个具体的实例,读者可以学习到如何解决实际问题,理解各种编程概念,并且每个实例都提供了...

    java调用python入门详解

    3. **参数传递**: Java可以通过命令行参数向Python脚本传递数据。这些参数在Python脚本中通过`sys.argv`获取,其中`sys.argv[0]`是脚本本身的路径,其余参数依次是传递的值。 4. **结果返回**: Python脚本可以通过...

    Android AIDL中Map参数传递的问题详解

    Android AIDL中Map参数传递的问题详解是 Android 应用程序接口定义语言(AIDL)中的一個重要课题。AIDL 是 Android 操作系统中的一個接口定义语言,用于定义应用程序之间的接口。通过 AIDL,可以实现不同应用程序...

    java 反射机制详解

    Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...

    Java可变参数列表详解

    Java可变参数列表,也称为不定参数,是Java语言中的一种特性,允许方法接收数量可变的参数。这种特性在编程时提供了极大的灵活性,尤其是在处理不确定数量输入的情况下。以下是关于Java可变参数列表的详细解释。 1....

Global site tag (gtag.js) - Google Analytics