`

JAVA 参数传递机制 值传递 or 引用传递

阅读更多

    Java的参数传递机制是在Java中一个比较烦的问题,一般人都不太会注意,但要详细的解释一下其机制的话还是有很多人说不上来。其实我也是,所以就查了点相关资料并且记录下来,好好理解Java的参数传递。

        对于参数传递主要可分为几类:1、Java的基本类型作为参数传递时,主要是传递值的拷贝。所以不能改变原值。2、Java的对象作为参数传递时,是引用传递,把对象在内存中的地址拷贝传递给参数。

        下面举个例子来简单说明(例子是网上找的,呵呵!)

public class PersonT {
	
	public void change(Person p) {   
         p.name = "mary";   
         p.age = 20;   
     }

     public void changeInt(int i) {   
         i = 8;   
     }
     
     public void change1(Person p){   
        p = new Person("tom",22);   
     }
     
     public static void main(String[] args) {
    	 
         PersonT t = new PersonT();
         Person p = new Person("john", 18);
         
         Person p1 = p;
         System.out.println(p);
         
         t.change(p1);   
         System.out.println(p1);   
         System.out.println("传回来的值指向是否一致:" + p.equals(p1));
         
         int i = 10;   
         System.out.println("i值为:" + i);
         t.changeInt(i);
         System.out.println("i值为:" + i);
         t.change1(p);
         System.out.println(p);
         
     }
     
 }   

 输出结果为:

姓名:john 年龄:18
姓名:mary 年龄:20
传回来的值指向是否一致:true
i值为:10
i值为:10
姓名:mary 年龄:20

 

    由上面的例子可知:对于Java来说值传递所传递的是原值的备份,所以对其修改以后原值还是没有变化,而引用传递,则是传递对象的地址,所以即使是对象内容改变其值也不会变化,因为引用地址没变化。

总结:

1. 值传递 所传递的是原值的拷贝,即使拷贝在传递后发生了变化,原值也不会改变。

2. 引用传递 所传递的是引用对象的地址,所以在传递后对于对象内容的改变并不能使得传递参数发生变化,只有在指向不同对象是才会发生变化。

 

分享到:
评论

相关推荐

    multipartform-data 参数传递

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

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

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

    WebService CXF 对象传递 附

    例如,如果输入参数是`MyObject`,CXF会利用JAXB将其从XML字符串转换为Java对象。 - **反序列化**:同样,服务方法返回的对象也会被CXF转换为XML,然后发送回客户端。 5. **JAXB的使用** - **注解Java类**:使用`...

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

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

    世界五百强java面试题下载

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

    Java调用带参数的存储过程并返回集合

    在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java可以通过数组或Java Collection类型传递。在返回集合时,可以将结果集映射到Java集合对象,如ArrayList或自定义的实体类,这样可以更好地适应业务需求。...

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

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

    java虚拟机常用命令

    Java虚拟机(JVM)是Java程序的运行环境,提供了Java程序运行所需的各种资源和管理机制。在Java虚拟机运行过程中,我们可能需要使用各种命令工具来监控和诊断可能出现的问题。以下是一些常用的JVM命令工具及其知识点...

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

    java五种jsp页面跳转方法详解 2009-08-21 09:06 1. RequestDispatcher.forward()  是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到 另外一个Servlet,JSP 或普通HTML...

    shell 脚本调用Java类

    在Shell脚本中,你可以通过`java`命令的`-cp`或`-classpath`选项指定更复杂的类路径,通过`java`命令后的参数传递给Java程序。此外,可以使用`if`、`while`等控制结构在Shell脚本中实现条件判断和循环,以适应各种...

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

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

    Oracle触发器里调用Java程序

    需要注意的是,由于数据库安全策略,Java方法可能无法直接访问数据库,因此通常需要通过传递参数和返回结果来交互。 此外,为确保Java代码的高效执行,可以考虑使用Java Persistent Archive (JPA) 或 Oracle ...

    kotlin for java or android 中文开发文档

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

    wsdl2java工具

    `wsdl2java`提供了丰富的命令行参数,可以定制生成代码的样式、数据绑定机制、异常处理等。例如: - `-frontend`:选择不同的前端处理器,如JAXWS,用于控制生成的代码风格。 - `-d`:指定输出目录,生成的Java代码...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    在实际开发中,你还需要在对应的Java接口和实现类中编写对应的方法,将前端传递的参数正确地绑定到Map对象中,并调用Mybatis的SqlSession执行查询。 总的来说,Mybatis提供了一套灵活的机制来处理动态SQL,包括处理...

    java函数式编程

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

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

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

    SQP/PLUS函数与子过程 以及java中的调用PPT

    两者都可以通过参数列表传递值,但调用方式有所不同。函数通常在表达式中被调用,可以作为其他表达式的一部分,而过程则独立执行,通常用EXECUTE语句调用。 在SQL中,创建过程的语法如下: ```sql CREATE [OR ...

    如何轻松打java-jar包

    如果`.jar`文件没有明确的主类或者需要传递参数,可以使用以下格式: ``` java -cp MyApp.jar com.example.MyApp arg1 arg2 ``` 这里,`com.example.MyApp`是主类的全限定名,`arg1`和`arg2`是传递给主类的参数。 ...

Global site tag (gtag.js) - Google Analytics