`
ganglong99
  • 浏览: 162052 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Java方法传递参数说明

阅读更多

我们都知道,Java中对于基本数据类型作为方法参数时,都是值传递。

那么对象作为方法的参数,又是传递的什么呢?

java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,JAVA方法参数传对象,传的是对这个对象引用的一份拷贝,即地址值,跟原来的引用都是指向同一个对象。所以说,JAVA方法参数传的都是值。

 

也可以说当方法参数是对象时,传递的是引用,只是它并不是传递的对象的原始引用,而是原始引用的一个拷贝。也就是说当将对象作为参数传递给方法后,就会有两个引用,指向同一个对象地址。

 

程序一 传的对象值是改变的。

    public class Test {
        public Test() {
            int[] count = { 5 };
            change(count);
            System.out.println(count[0]);
        }

        public void change(int[] counts) {
            counts[0] = 6;
            System.out.println(counts[0]);
        }

        public static void main(String[] args) {
            Test t = new Test();
        }
    }

 

程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。

 

程序二 传的对象值不改变

    class Foo {
        int i = 0;
    }

    public class A {
        public static void main(String args[]) {
            Foo f = new Foo();
            add(f);
            System.out.println(f.i);
        }

        public static void add(Foo f) {
            f = new Foo();
            f.i++;
        }
    }

 

输出结果是0
程序2中,也是传一份引用的拷贝,但在 add()方法中,f=new Foo(); new出了一个新的对象,所以引用的拷贝指向了一个新的对象。原来的引用还是指向原来的对象,所以原来的值还是没有改变。

从这一点就可以看出,确实产生了一个引用的拷贝。

 

程序三 String不改变,数组改变

    public class Example {
        String str = new String("good");
        char[] ch = { 'a', 'b', 'c' };
        public static void main(String args[]) {
            Example ex = new Example();
            ex.change(ex.str, ex.ch);
            System.out.print(ex.str + " and ");
            Sytem.out.print(ex.ch);
        }

        public void change(String str, char ch[]) {
            str = "test ok";
            ch[0] = 'g';
        }
    }

 

程序3输出的是 good and gbc.
String 比较特别,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。

分享到:
评论

相关推荐

    java参数传递

    这里详细的说明了,java参数传递的过程,引用传递,值传递

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

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

    关于java的传递方式问题

    Java中方法参数的传递总是采用值传递的方式,即使对于引用类型的变量也是如此。 ##### 3.1 值传递 对于原始类型,传递的是值的副本。这意味着在方法内部对参数的任何改变都不会影响到原变量。 **示例**: ```java...

    总结--Mybatis传递参数的几种方法

    Mybatis 传递参数的几种方法 Mybatis 中传递参数有多种方法,以下是其中的四种: 1. 传递单个参数 在 Mybatis 中,传递单个参数非常简单。可以直接将参数写在方法中,参数类型可以是 String,也可以是基本类型,...

    浅谈Java中方法的参数传值.pdf

    综上所述,通过Java方法参数传递的知识点,我们可以更深入地理解Java程序的运行机制以及变量、数据类型和方法调用之间的关系。这不仅帮助编程者更好地组织代码结构,还能够在调试过程中快速定位问题所在,提高开发...

    浅议JAVA语言中的参数传递.pdf

    参数传递是指在方法调用时,传递参数的方式。在 Java 中,参数传递可以分为按值传递和按引用传递两种方式。 按值传递是指在方法调用时,传递的参数是按值的拷贝传递。这种方式的特点是,传递的参数值不影响原来的...

    jsf传递参数的说明

    本文将详细介绍JSF中如何传递参数,主要关注使用`f:param`标签的方式。 首先,我们来看一下`f:param`标签的基本用法。在JSF中,`f:param`标签用于在命令组件(如`h:commandLink`或`h:commandButton`)内部添加参数...

    Java命令行运行参数说明大全.txt

    #### 三、基本参数说明 ##### 1. `-client` 和 `-server` - **-client**:此参数指示JVM使用客户端模式。客户端模式的JVM通常启动速度较快,但在运行时性能和内存管理效率方面不如服务器模式。它适合于需要快速...

    JAVA参数传递方式实例浅析【按值传递与引用传递区别】

    JAVA 参数传递方式实例浅析【按值传递与引用传递区别】 JAVA 参数传递方式实例浅析【按值传递与引用传递区别】是 JAVA 编程语言中的一种基本概念,对于 JAVA 开发者来说是非常重要的。本文将通过实例形式分析 JAVA ...

    JSF中文教程+JSF参数传递方式

    本教程将深入探讨JSF的核心概念以及如何在JSF应用中传递参数,帮助开发者更好地理解和掌握这一技术。 首先,让我们理解**JSF的基本架构**。JSF的核心组件包括视图、控制器和模型,它们共同构成了MVC(Model-View-...

    传递指定的参数建立websocket连接,并给指定的连接用户发送消息

    5. **OosDsParamsVO**: 这可能是一个数据传输对象,用于封装传递给WebSocket的参数。这些参数可能包含连接标识、消息内容等信息。 6. **IOosAgentSendNewsService**: 这是服务接口,定义了发送消息的方法,方便其他...

    java可变参数.pdf

    总结来说,Java的可变参数提供了一种灵活的方式来编写方法,让方法调用者可以传递任意数量的参数,极大地方便了编程。但同时,使用可变参数时也应该注意其与方法重载之间的关系,确保调用的明确性和方法的正确性。在...

    浅谈Java中的参数传递问题

    在Java中,基本类型参数的传递是按值传递的,也就是说,当我们将基本类型参数传递给方法时,实际上是将该参数的值复制了一份传递给方法,而不是传递参数的引用。因此,当我们在方法中修改参数的值时,不会影响实际...

    两个Activity之间传递参数的代码

    本篇文章将详细讲解如何在Android的两个Activity之间传递参数,并通过给出的`LoginActivity.java`和`MainActivity.java`两个文件为例进行说明。 首先,我们要了解在Android中,有两种主要的方式来传递数据: 1. ...

    关于 JSNI 调用 Java 方法时的 Type Signatures 说明

    ### 关于 JSNI 调用 Java 方法时的 Type Signatures 说明 #### 一、Type Signatures 的概念与重要性 在 Java Native Interface (JNI) 和 Google Web Toolkit (GWT) 中,Type Signatures 是一种特殊的表示法,用于...

    java JAVA_OPTS javaagent

    `使用说明.txt`应当提供了`testagent.jar`的使用指南,包括如何配置`JAVA_OPTS`,如何传递参数,以及可能需要关注的注意事项。这份文档对于正确使用代理至关重要。 `com`可能是源代码的一部分,可能包含了一部分...

    Java Servlet API说明文档

    这个API说明文档详细阐述了如何利用Java来构建动态、交互式的Web应用程序。下面将对Java Servlet API的一些关键概念、核心接口以及常见用途进行深入探讨。 一、Servlet接口 Servlet接口是所有Servlet的基础,定义了...

    JAVA编程规范.pdf

    在方法之间传递参数时,需要遵守一些基本原则。首先,参数的数据类型应该明确地指定。然后,参数的检验也非常重要,避免假设数据没有问题。最后,参数传递也应该避免使用类变量,而是使用参数传递数据。 本文档提供...

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

    根据传递的数据类型不同,Java中有两种主要的参数传递方式:值传递(Value Passing)和引用传递(Reference Passing)。这两种方式决定了函数内部如何处理传入的参数,进而影响到函数外部的原始数据是否会发生变化。...

Global site tag (gtag.js) - Google Analytics