Java 参数值传递机制的实现

 更新时间:2025年05月22日 08:29:19   作者:kocscs123  
本文主要介绍了Java 参数值传递机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一个很经典的问题: java的方法入参 是值传递还是地址传递?

答案是:值传递。

今天排查一个生产问题,数据库链接资源没有关闭。

大致代码逻辑如下:

try{
    Preparestatement ps = null;
    String sql = "select * from tableA where id=?";
    this.query(ps,sql);
}catch(Exception e){
    logger.error("error:",e);
}finally{
    if(ps!=null){
        ps.close();
    }
}

private void query(Preparestatement ps ,String sql){
    ps = this.getPreparestatement();
    ........//不重要的查询逻辑
}

可以看到 对象实例 ps 被传到了一个私有方法:query(Preparestatement ps ,String sql) 里,并在方法里面进行赋值。然后在方法外进行判空关闭。

很明显,这段代码的作者,并不熟悉JAVA的值传递机制,虽然ps被传到方法里赋值,但是方法外的ps对象依然还是null,所以finally模块里的代码并没有执行close。只是表面看起来会关闭资源。

实际上,方法外的ps,和方法里面的ps 并不是同一个对象,或者说并不是指向同一个地址。java传递的是值而不是地址。这是和C语言最大的区别。

Java可以在方法里修改对象的属性(如 a.setName("myName")),这种修改是可以影响到方法外的对象,但是并不能通过=号,对对象进行重新赋值来影响方法外的对象(如a=getNewObject())

到此这篇关于Java 参数值传递机制的实现的文章就介绍到这了,更多相关Java 参数值传递内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot 全局异常处理策略设计之@ExceptionHandler 与 @ControllerAdvice 生效原理源码解析

    Spring Boot 全局异常处理策略设计之@ExceptionHandler 与&nb

    SpringBoot全局异常处理策略设计@ExceptionHandler与@ControllerAdvice生效原理源码解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-01-01
  • Java将数据写入到PDF文件的操作步骤

    Java将数据写入到PDF文件的操作步骤

    本文介绍了如何在Java中将数据写入到PDF文件中,包括安装PDF生成工具、创建Maven项目、配置文件、创建模板、编写代码和启动测试,文中通过代码示例和图文给大家介绍的非常详细,需要的朋友可以参考下
    2025-10-10
  • 详解如何在Java项目中实现信号的连续接收

    详解如何在Java项目中实现信号的连续接收

    在Java项目中,信号的连续接收是一项重要的任务,特别是在处理异步事件或者需要对外部事件做出响应时,本篇博客将介绍如何在Java项目中实现信号的连续接收,包括信号的监听、处理和停止等步骤,需要的朋友可以参考下
    2023-11-11
  • 详细分析JAVA8新特性 Base64

    详细分析JAVA8新特性 Base64

    这篇文章主要介绍了JAVA8新特性 Base64的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 第一次通过docker部署java服务的全过程

    第一次通过docker部署java服务的全过程

    这篇文章主要介绍了第一次通过docker部署java服务的相关资料,在这个过程中,我们将从基础开始,逐步深入到Docker镜像的构建和Java项目的部署,文中通过代码及图文介绍的非常详细,需要的朋友可以参考下
    2026-03-03
  • java中阻塞队列和非阻塞队列的实现

    java中阻塞队列和非阻塞队列的实现

    在Java并发编程中,阻塞队列和非阻塞队列是两种主要的队列类型,分别适用于不同的场景,了解这两种队列的特点和工作机制,可以帮助开发者更好地选择合适的数据结构解决并发问题
    2024-10-10
  • SpringBoot2线程池定义使用方法解析

    SpringBoot2线程池定义使用方法解析

    这篇文章主要介绍了SpringBoot2线程池定义使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot项目在启动后自动关闭的实现

    SpringBoot项目在启动后自动关闭的实现

    我们在写spring boot web项目时,有时会遇到启动后立即关闭的情况, 本文主要介绍了SpringBoot项目在启动后自动关闭的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • IDEA中使用tomcat部署项目全过程

    IDEA中使用tomcat部署项目全过程

    文章介绍了如何在IDEA中打开并设置Tomcat项目,包括设置JDK版本、添加模块、配置web.xml路径等步骤,然后详细说明了如何配置Tomcat并部署工件,以及如何启动Tomcat进行访问
    2026-03-03
  • Java实现对象排序的两种方式详解

    Java实现对象排序的两种方式详解

    这篇文章主要介绍了Java实现对象排序的两种方式详解,在Java中经常会涉及到对象数组的排序问题,则就提到对象之间的比较问题,今天我们就来看一下两种不同排序方式之间的区别,需要的朋友可以参考下
    2023-09-09

最新评论