`
zretc
  • 浏览: 20155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA值传递or引用传递

    博客分类:
  • Java
阅读更多

 

经常会有学员讨论JAVA语言究竟是值传递还是引用传递的问题。这里我想对这个问题阐述一下我个人的观点。很多关于JAVA参数传递方式的论述都会去对比参照C/C++C#,故而我也会对C/C++C#的参数传递方式做一个简单的描述。在C/C++或是C#语言中有明确的引用传递方式以区别值传递方式。在C/C++语言中利用指针实现引用传递,即定义函数时将形参的数据类型定义成指针类型。调用函数时,取变量地址或是指针变量作为实参传递。实际上传递的是地址(指针)的拷贝,实参和形参指向都是同一个地址,所以可以认为在函数中对参数的修改是可以被“带回”的。而值传递时,参数传递的是值得拷贝,在函数中无论如何修改这个“副本”,都无法影响原来的值。举一个简单的例子一个值就相当于一个电视机,而指针就相当于这个电视机的遥控器。引用传递时相当于复制了一个新遥控器,用新遥控器修换台,电视是会被“改变”的。值传递则相当于复制了一个新电视机,你对新电视机的调整是不会影响到原来的电视机的。

 

JAVA语言的数据类型分为基本类型和引用类型。基本类型数据只包含值部分。引用类型数据包含引用和值两个部分,其中引用类似于C语言的指针(JAVA出于安全的考虑删去了指针的概念)但是我们不能像使用C语言一样操作它。我通过引用可以操作其指向的值,而且是我们也不能撇开引用找到值部分,因为我们无法得到值在内存中的真实地址。当调用方法时,如果参数是基本数据类型的数据,则传递的是值本身的拷贝;如果参数是引用类型的数据,则传递的是引用的拷贝。所以JAVA是值传递还是引用传递是由所传参数的数据类型决定的,或者说这根本就是个伪命题。对于基本数据类型参数想要实现引用传递的效果,可以将基本数据类型的参数类型改为其相应的包装类型,因为包装类型是属于引用类型的。从JDK1.5开始JAVA语言可以实现基本数据类型和包装类型之间的自动转化,简化代码的复杂度。

 

至于C#语言,可以在定义方法时,在参数类型前通过一个修饰符强制参数传递的方式是值传递或是引用传递,否则和JAVA语言类似。

分享到:
评论

相关推荐

    两个QM之间消息传递JAVA程序

    3. **Java API for MQ (JMS or JMSC)**:IBM提供了Java API,使得开发者可以使用Java编写应用程序来与MQ队列管理器交互,包括创建、读取、发送和接收消息。 现在,让我们分析一下提供的代码片段: - `Message` 类...

    multipartform-data 参数传递

    ### multipart/form-data 参数传递 在Web开发中,`multipart/form-data`是一种用于发送表单数据的编码类型,尤其适用于处理文件上传。此编码方式能够使客户端浏览器将表单中的普通文本字段与文件字段一起发送到...

    WebService CXF 对象传递 附

    在CXF中,对象传递通常涉及到Java对象到XML(反之亦然)的转换,这称为Java对象绑定(JAXB)。JAXB允许我们通过简单的注解将Java类映射为XML Schema,从而实现对象的序列化和反序列化。 3. **创建Web服务** 创建...

    世界五百强java面试题下载

    ### Java面试题解析:传递引用的理解 #### 题目背景 在Java编程语言中,对象的传递方式一直是面试中的热点话题之一。本篇将基于一个具体的代码示例来探讨Java中对象引用传递的特点及其背后的原因。 #### 题目描述 ...

    socket做的支持多线程断点上传or断点续传Java源码

    标题中的“socket做的支持多线程断点上传or断点续传Java源码”涉及到的是在网络编程中,如何使用Java的Socket API实现一个能够处理断点上传和断点续传功能的服务。这是一个高级的网络编程任务,通常在大型文件传输...

    java虚拟机常用命令

    这个命令可以显示Java虚拟机的进程ID、主类名称、jar文件名以及传递给main方法的参数。jps命令的基本格式为: ``` jps [options] [hostid] ``` 其中,options参数可以是: - `-q`:仅显示进程ID,不显示类名称、jar...

    kotlin for java or android 中文开发文档

    ### Kotlin for Java or Android 中文开发文档 #### 概述 Kotlin 是一种现代的、静态类型的编程语言,设计初衷是为了提升 Java 开发者的生产力,同时也保持与 Java 的完全兼容性。Kotlin 提供了一系列创新的功能,...

    shell 脚本调用Java类

    echo "Java is not installed or not in PATH. Please install Java." exit 1 fi # 执行Java程序 java $JAVA_CLASS_PATH $MAIN_CLASS ``` 这个脚本首先通过`command -v java`检查Java是否在PATH环境变量中,然后...

    Java高性能线程库(java.util.concurrent包的补充)

    一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用。该类库不提供远程的消息功能,其设计的宗旨是实现一个内存中的消息传递机制. 主要特点有: * All ...

    Oracle触发器里调用Java程序

    在这个例子中,`:NEW.column_name`代表新插入行的某一列值,`JAVA.'MyJavaClass.doSomething'`则是调用Java方法的方式。需要注意的是,由于数据库安全策略,Java方法可能无法直接访问数据库,因此通常需要通过传递...

    wsdl2java工具

    当WSDL文件在本地时,可以通过文件路径直接传递给`wsdl2java`。例如: ``` wsdl2java -d /output/directory /path/to/your.wsdl ``` 这将生成Java类和相关的接口,输出目录设置为`/output/directory`。 2. **...

    Java调用存储过程--传入集合参数

    在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将深入探讨如何在Java中有效地调用存储过程,并向其传递集合参数,主要聚焦于Oracle...

    java函数式编程

    Lambda表达式是Java函数式编程的核心,它允许我们将匿名函数作为一个值传递给方法或者存储为变量。Lambda表达式的语法形式为`(参数列表) -> 表达式或代码块`。例如,一个接受两个整数并返回它们之和的lambda表达式...

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...

    java五种jsp页面跳转方法详解

     是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到 另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的...

    JESS+JAVA详细配置手册

    - **值传递**:在JESS和Java之间传输数据。 - **实现Java接口**:使用JESS代码实现Java接口。 - **工作内存中的Java对象**:将Java对象存储在工作内存中。 - **设置和读取JavaBean属性**:操作JavaBean对象的属性。 ...

    如何轻松打java-jar包

    在Java开发过程中,将编译后的`.class`文件打包成`.jar`文件是常见的操作,这有助于代码的分发、部署和执行。`.jar`文件是Java的可执行归档文件,它包含了类文件、资源文件以及元数据,使得用户可以方便地运行Java...

    Java面试测试题目2018张大成总结

    - Java中传的是对象的引用,对于基本类型传的是值。 #### 50. 如果要重写一个对象的equals方法,还要考虑什么 - 同时重写`hashCode`方法,确保一致性。 #### 51. Java的”一次编写,处处运行” - 通过Java虚拟机...

    java打包步骤及相应工具

    - 脚本中应包含如何启动Java应用的部分,比如使用`javaw.exe`启动JAR,并传递必要的命令行参数。 5. **编译和生成exe安装程序**: - 使用Inno Setup编译器(集成在安装包内)编译.iss脚本,生成.exe安装程序。 -...

Global site tag (gtag.js) - Google Analytics