Java方法的形参和实参

本文深入探讨Java中方法参数的传递机制,区分值类型与引用类型的传值调用和传引用调用,通过具体示例说明两者在方法内部修改时对外部实参的影响差异。

Java方法的形参和实参

形参与实参对应两种类型:值类型与引用类型

  • 值类型:包括8种基本类型(byte、short、int、long、double、float、char、boolean)+ String
  • 引用类型:数组、类、接口等类型。

注意String类型,这个比较特殊,它是存储在常量池中的,你可以把它近似看成值类型的。因为它的值一旦确定,就无法改变。

  • 为值类型时,形参方法内的参数值改变,并不会影响到实参的值。
  • 为引用类型时,形参方法内的参数值改变时,会影响到实参的值。注意是地址所指向的堆中的值,如果形参的地址改变了,那么这个改变不会影响到实参。

形参

用来接收调用方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。

public void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
        System.out.println("a:" + a + " b:" + b);
}

这里边的a,b就是形参,temp是一个局部变量,方法结束,在栈空间中就会被销毁

实参

传递给被调用方法的值,预先创建并赋予确定值。

  1. 调用上面的
  2. swap(1,2);
  3. 其中1和2就是实际的参数值,就叫实参

传值调用

传值调用中传递的参数为基本数据类型,参数视为形参。

public class Transform {

  public static void main(String[] args) {
    int i = 10;
    int j = 5;
    System.out.println("i: " + i + ", j: " + j);
    Transform.swap(i, j);
    System.out.println("i: " + i + ", j: " + j);
  }

  private static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    System.out.println("a: " + a + ", b: " + b);
  }
  
}

这里我们写了一个实现两个 int 型数据交换的方法,并且在 main() 方法中调用,然而结果却并不是我们想要的。
运行结果如下图所示:
传值调用测试运行结果
就是因为基本数据类型是属于传值调用,当我们要实现交换时,方法内可以完成交换,只是形参进行了交换,方法结束,栈空间中就会销毁 swap() 方法内的局部变量,所以当调用 swap() 时,最终值还是实参的初始化值,并没有被修改。值改变作用到了形参,而不会作用到实参。

传引用调用

传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变会影响到实参。

/*
	参数传递:
	形参:方法声明时,方法小括号内的参数
	实参:调用方法时,实际传入的参数值
	java中传递值得机制:
	形参是基本数据类型的: 将实参的值传递给实参的基本数据类型的变量
	形参是引用数据类型的: 将实参的引用类型的值(即在堆空间中生成的首地址的值)传递给形参的引用类型的变量
*/
public class Test {

  public static void main(String[] args) {
    Test t = new Test();
    Data data = new Data();
    System.out.println("data.i: " + data.i + ", data.j:" + data.j);
    // 调用
    Test.swap(data);
    System.out.println("data.i: " + data.i + ", data.j:" + data.j);
  }

  private static void swap(Data data) {
    int temp = data.i;
    data.i = data.j;
    data.j = temp;
  }
}

class Data {
  int i = 10;
  int j = 5;
}

形参部分直接传进去了一个对象,相当于堆空间的首地址值得引用
运行结果:
传引用调用测试运行结果

总结

  1. java的基本数据类型是传值调用,引用类型是传引用调用;
  2. 当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参;
  3. 当传引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会对应改变实参对象的内容。
本资料系统阐述了针对Hitbot四自由度机械臂开发的综合仿真与控制软件套件,该套件兼容ROS2的Humble与Jazzy两个发行版本。软件核心提供了完整的机器人描述模型,并预先集成了MoveIt2运动规划框架,同时支持在Gazebo仿真平台的经典版本及其后续更新的Harmonic版本中进行部署与测试,以适应多样化的研发需求。首先,文档概要说明了所依托的ROS2开发环境。Humble作为当前稳定的长期支持版本,在系统实时性、通信安全及开发工具链方面进行了全面优化,尤其适用于构建复杂的多机器人协同系统。Jazzy则代表了在Humble基础上进行的特定功能扩展或性能增强,旨在提供更先进的开发体验。在机器人建模部分,资料详尽描述了Hitbot机械臂的统一定义格式模型。该模型采用标准化的XML架构,精确设定了机械本体的拓扑结构、各运动副的类型与限位、连杆的质量属性、惯性张量以及部件间的连接关系,为后续的动力学仿真与精确控制建立了准确的数字孪生基础。软件的核心功能围绕MoveIt2的深度集成展开。MoveIt2作为ROS2中负责运动规划的关键中间件,其整合了包括逆向运动学求解、工作空间感知、实时碰撞规避与轨迹优化在内的多项核心算法。文档具体说明了如何针对该机械臂模型配置运动学求解插件、调整全局与局部规划器参数、设置碰撞检测规则以及定义末端执行器组,从而实现对机械臂运动任务的可靠规划与控制。此外,资料系统指导了在Gazebo仿真环境中构建测试场景的步骤。Gazebo提供了高保真的物理引擎与传感器模拟能力。文档不仅阐述了在经典Gazebo中导入机器人模型并添加物理属性的方法,也介绍了如何利用Harmonic版本可能具备的改进渲染管线或增强物理模拟特性,以提升仿真实验的真实性与效率。随附的技术材料可能包含额外的部署指南、进阶应用示例或特定场景的配置说明,旨在协助用户从基础操作到高级功能的全方位掌握。总体而言,该集成化软件包融合了ROS2前沿框架、先进运动规划库与高精度仿真工具,为四自由度机械臂在学术研究、原型验证及工业应用中的建模、算法测试与系统集成提供了完整的解决方案。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值