再探java方法参数的传递

Eclipse调试JDK源码无法查看变量值或者变量值显示arg的解决方案 缘起 研究JDK源码的同学应该知道,在debug的时候是无法看源码中局部变量的值的,且方法变量也会显示成arg1,arg2这种形式而不是真正的变量名。 原因 为什么呢?因为在JDK中,sun对rt.jar中的类编译时,去除了调试信息。那么是否有解决办法呢?答案是肯定的。 解决方案 在你的D:盘新建jdk文件夹,然后在文件夹里面分别创建两个文件夹jdk_src(存放源码)和jdk_debug(存放... 阅读详情

我们知道方法传递有值传递、引用传递、名称传递。

而在java中,是统一的值传递,是一个值的拷贝。

对于原始类型,传递方法参数就是这个具体值。所以在方法里面改变这个值是不影响方法调用时的地方值。

而对于对象类型,是一个引用的拷贝。我们可以看下面的例子。

首先,我们定义一个Employee类。

class Employee{

    public Employee(int s){
        this.salary = s;
    }
    private int salary;

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

}

然后,写一个调用方法:

    public static void main(String[] args) {
        Employee a = new  Employee(4);
        Employee b = new  Employee(5);
        System.out.println("employee a salary:"+a.getSalary());
        System.out.println("employee b salary:"+b.getSalary());
        swap(a, b);
        System.out.println("employee a salary:"+a.getSalary());
        System.out.println("employee b salary:"+b.getSalary());
    }

    public static void swap(Employee x,Employee y){
        Employee temp = x;
        x = y;
        y = temp;
    }

仔细看以上程序,我们预估员工a和员工b交换了。

但真实是这样的吗?

运行一下。

运行后的结果,

employee a salary:4
employee b salary:5
employee a salary:4
employee b salary:5

发现没有a和b并没有交换。

这是为什么?

如果用指针的概念就比较好理解了。

对于Employee a = new Employee(4);,这里的a实际上并不是真正的对象本身,它只是一个引用。当把a传给swap方法时,拷贝的是a本身即这个引用值。

所以,在swap方法里,交换的都是引用值的拷贝,对于对象本身来讲,是没有任何影响的。

既然是这样,我们如果要改变a引用真正对象的值。我们可以这样。


    public static void main(String[] args) {
        Employee a = new  Employee(4);
        System.out.println("employee a salary:"+a.getSalary());
        setSalary(a);
        System.out.println("employee a salary:"+a.getSalary());
    }

    public static void setSalary(Employee e){
        e.setSalary(500);
    }

这样的话,虽然传进去的是对象a的引用值拷贝,但是引用的位置是对的啊。这样参考引用去改变对象的值,是可以成功的。

可以看下结果:

employee a salary:4
employee a salary:500

这样就是没问题的。

不知道,我解释的是不是够明白。如果文章被你看到了,可以给个反馈。^-^

深入解析set_clock_groups:异步时钟约束的最佳实践与陷阱规避 本文深入解析了FPGA/芯片设计中set_clock_groups命令在异步时钟约束中的核心作用与最佳实践。文章对比了同步时钟、异步时钟与不重叠时钟的区别,强调了正确使用set_clock_groups避免时序分析陷阱的重要性,并提供了与set_false_path的优先级差异分析及实战规避方法,帮助设计者确保时序收敛与电路可靠性。 阅读详情

相关推荐

FFmpeg视频缩放终极指南:从基础命令到保持宽高比的5种实战技巧

本文是FFmpeg视频缩放的终极指南,详细讲解了从基础命令到保持宽高比的5种实战技巧。针对不同平台(如抖音、B站、Instagram)的分辨率要求,提供了具体的参数模板和批量处理脚本,帮助内容创作者高效、精准地调整视频大小,避免画面变形或黑边问题,实现多平台适配。

juice的博客 457

JAVA 17版本介绍(一)安装环境介绍

为什么笔者会写这篇文章,主要还是Java更新支持来说。首先我们要知道LTS版本JDK和普通JDK的区别。 (LTS版本,Long-Term-Support),Java 大版本周期变化后的长期支持版本。 1.各个JDK版本介绍 1.1.JDK8新特性(2014年初)(LTS版本) 1、Lambda表达式 2、函数式编程 3、接口可以添加默认方法和静态方法,也就是定义不需要实现类实现的方法 4、方法引用 5、重复注解,同一个注解可以使用多次 6、引入Optional来避免空指针 7、引入Streams相关的AP

歪桃的博客 9万+

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

解决eclipse自动生成参数为arg0,arg1问题

如上图,参数为arg0,,这种情况是因为我实现的job,eclipse没有加载它的源码。 这个job是来自于我使用的quartz库。解决办法是:1、右键项目–Build Path–Configuration Build Path2、选中Libraries–找到它引用的jar包;比如:例子中的Job引用的是quartz-2.2.3.jar3、点横向的三角形图标展开,选中Source attachme

山鬼谣的专栏 4115

从冰棍到铸钢:手把手用Fluent融化凝固模型模拟3个不同场景(含案例设置对比)

本文深入探讨了Fluent融化凝固模型在冰棍融化、巧克力涂层凝固和钢铁连铸三个不同场景中的应用。通过详细的参数设置和案例对比,帮助工程师掌握相变模拟的核心技巧,提升工业级CFD分析的精度和效率。

weixin_42522953的博客 471

UE5 使用Slate制作对话窗口

使用Slate制作对话框窗口并获取对话框结果,非UMG

qq_25521145的博客 3189

Java 17新特性,快到起飞?惊呆了!

都说Java 8 是YYDS,那你注意到 Java 17 也是长期支持版本吗?目前按计划 JDK 19 将于今年 9 月发布SpringBoot 正式支持Java 17,Kafka3.0弃用Java8Spring Boot 2.5.5是Spring Boot 第一个支持Java 17的版本。现在你已经可以从Spring Initializr初始化Spring Boot 支...

华章IT官方博客 1万+

llama-factory微调qwen2.5-vl

使用llama-factory完成qwen2.5-vl微调

qq_44908396的博客 2932

【Java】Java 17 新特性概览

Java 11 于 2021年09月14日 正式发布,且为长期支持版本(Long-Term-Support - LTS)。。下面为 Oracle Java SE 产品的一些关键产品日期示例(

迪曼奥特迦-博客 1万+

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 533

YOLOv12创新改进 | 全网独家创新篇、小目标检测改进 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLOv12有效涨点

本文提出了HS-FPN(高频和空间感知特征金字塔网络),通过HFP(高频感知)模块增强小目标特征,SDP(空间依赖感知)模块捕获像素间空间依赖关系。实验在AI-TOD等小目标数据集上验证了该方法的有效性,相比FPN显著提升检测性能。文章详细介绍了HS-FPN的网络结构、核心代码实现及在YOLOv12中的应用方法,并提供多种改进版本的yaml配置文件,为小目标检测任务提供了有效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 336

Java方法的参数传递

Java中方法的参数传递只有一种方式:值传递 将实际参数值的副本(复制品)传入方法中,而参数本身不受影响。所谓形参就是方法声明定义的时候的参数,实参就是方法调用时实际传递给形参的参数。介绍之前先简单了解下Java内存模型 那对于常见的一个学习的类就是Person,关于以下初始化如何实现的呢? //对象声明 Person p = new Person(); //变量定义 int i = 1; 栈中存放的对象的地址,真正的对象存在堆中,这就是引用对象 1.基本数据类型方法参数传递 接着.

止语的博客 2781

MATLAB - ROS 2 工具箱入门教程

ROS 工具箱提供了一个连接 MATLAB® 和 Simulink® 与机器人操作系统(ROS 和 ROS 2)的接口。利用该工具箱,您可以设计 ROS 节点网络,并将 MATLAB 或 Simulink 生成的 ROS 节点与现有的 ROS 网络相结合。工具箱包括 MATLAB 函数和 Simulink 块,可通过记录、导入和回放 rosbag 文件来可视化和分析 ROS 数据。您还可以连接到实时 ROS 网络,访问 ROS 消息。

机器人控制与仿真应用 3068

java方法参数传递方式--按值传递、引用传递

java的方法参数传递方式有两种,按值传递和引用传递 1.按值传递

zhenge1990的博客 3万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java方法参数的传递方式

Java中方法参数的传递方式有两种,按值传递和引用传递。 值传递:值传递传递的是基本的数据类型和String字符串,实际参数把值传递给形式参数,形式参数将用这个值来进行操作,所以值传递的形式参数和实际参数分属两个不同的存储单元,在完成对值传递的操作之后,实际参数的值并没有发生改变 引用传递:传递的类型是引用数据类型,传的是地址。方法调用的时候,实际参数是对象(或数组)的地址,此时,实际参数和形式参...

qzlzwn的博客 1707

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JAVA 方法的参数是按值传递还是引用传递?

JAVA 方法的参数是按值传递还是引用传递?

xinnian468153的博客 4544

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java方法的参数是值传递还是引用传递?

文章目录前言方法参数为基本类型时方法参数为包装类型的引用类型方法参数为类的对象引用总结 前言 之前一个同事面试遇到了这么一个面试题“Java方法的参数是值传递还是引用传递?”,给我看之后我也是对结果不太确定。所以就百度了一波,感觉虽然问题很简单,但是问题直戳本质,觉得很有必要留下一点点痕迹啦。 在Java方法中参数列表有两种类型的参数,基本类型和引用类型。 基本类型:值存放在局部变量表中,无论如何修改只会修改当前栈帧的值,方法执行结束对方法外不会做任何改变;此时需要改变外层的变量,必须返回主动赋值。 引用数

qq_42726668的博客 2538

【java】方法的参数传递

方法:必须有其所在类或对象调用才有意义。 若方法含有参数: 形参:方法声明时的参数 实参:方法调用时实际传给形参的参数值 Java里方法的参数传递方式只有一种:值传递。 基本数据类型,值是保存在栈中; 引用对象,值保存在堆中,栈中存的是对象在堆中的地址。 方法参数传递之基本数据类型 public class Main { public static void main(String args[]) { int a = 0; swap(a); System.out.

qq_45746744的博客 4988

9. Java 方法与参数传递

Java 中的方法是执行特定任务的代码块,用于提高代码的复用性和模块化。方法的声明包括访问修饰符、返回类型、方法名、参数列表和方法体。方法可以分为静态方法和非静态方法,静态方法属于类本身,可直接通过类名调用,而非静态方法属于类的实例,需通过对象调用。访问修饰符(如 public、protected、private)控制方法的可见性。方法的使用场景包括代码复用、模块化和参数化行为。常见误区包括忽略返回值、混淆参数传递和未初始化局部变量。合理使用方法和访问修饰符有助于提高代码的安全性和可维护性。

weixin_43484713的博客 1208

Java 中的方法参数传递与值传递

在 Java 编程中,理解方法参数传递的机制是非常重要的。本文将通过一个简单的代码示例,深入探讨 Java 中的值传递(Pass by Value)机制,并分析为什么在某些情况下,方法内部的修改不会影响外部的变量。

李长渊的博客 789

Java 方法参数传递方式

Java中只有值传递!!!

Gettler的博客 1025

Java值传递方式详解:方法参数或参数的传递

java里面的方法参数 在程序设计语言里面,有一些参数传递给方法的专业术语:按值调用;引用调用;以前还有的按名调用(Algol就是使用的这种) 其中java使用的就时按值调用:这种方法的特点是只得到所有参数的拷贝,方法不能修改传递给它的任意参数变量的内容 public class Main { public static void main( String[] args) { int ...

qq_42128262的博客 842

Java 方法参数的值传递和引用传递

Java 方法参数的值传递和引用传递在Java中,实际上都是值传递,并不存在引用传递。人们所说的引用传递,实则为指针间地址的传递。要理解此,我们必须明白一个概念,形如Object o;这样的定义,实际上我们在定义一个指针。当我们把此指针传入方法形参,实则是把此指针所指向的地址传递给了方法形参,而不是对象本体的传入,也就是没有进行真正意义上的引用传递了。关于此问题的更多分析,请参阅笔者之前的一篇译文《

FIRE_TRAY的Android之路 2974

java 函数参数引用传递_JAVA中方法参数的引用传递

Java中方法参数的引用传递java中参数的传递有两种,分别是按值传递和按引用传递。按值传递不必多说,下面就说一下按引用传递。当一个对象被当作参数传递到一个方法,这就是所谓的按引用传递。public Class User{private String name;public String getName() {return name;}public void setName(String nam...

weixin_31994237的博客 1143

java方法参数是值传递还是引用传递

java方法参数是值传递还是引用传递 1.java方法传参机制 方法的形参的传递机制:值传递 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。 2.方法参数值传递示例 2.1.方法参数是基本数据类型 public class Test1 { public static void main(String[] args) { int v1 = 1; int v2 = 2; //交换两个变量

Bruce小鬼 1006

Java中方法的参数传递问题

最近有很多同学,就算是就业班毕业之后,还依然在问 java方法的调用中值的传递问题,实际参数究竟什么时候才会改变? 接下来我们先由一个例子来引出大家的问题,请看如下例子,并回答下面代码中的四个问题 public class Demo { public static void main(String[] args) { int a = 10; change(a); System.o...

黑马程序员官方博客 999
上一篇: 关于并发请求后台的研究
下一篇: 使用spring官网给出的SpingMVC的maven搭建方式自定义controller文件夹出错的解决办法
bbbbln
博客等级 码龄11年 14粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值