Java方法参数传递的问题,有点看头

Java参数传递详解
在Java当中,构造方法、函数,传递参数是最为常见的,有时候我们希望能带出计算结果,重新赋给传入值,实现对变量赋值的更新。
假如一个方法试图将一个参数值增加至原来的3倍,我们可能会写下如下代码:

class PassValue
{ //方法是否对参数构成影响?------传值的方式
public static void main(String[] args)
{
int i = 10;
callByValue(i);
System.out.println(i);
}
//申明一个没有返回值的【值调用】静态方法;
static void callByValue(int n)
{
n = n*3;
}
}

结果:返回10,也就是说,我们的i没有受到任何的影响;
其原理是i=10;当执行方法的时候,n拷贝了i的数值,并形成一个副本n=10;执行n=n*3;后n的值变为30;方法结束后,n不再使用,对我们先前的i没有任何的影响;

--------------------------------------------------------------------

class PassValue
{ //方法是否对参数构成影响?------传值的方式
public static void main(String[] args)
{
int i = 10;
i=callByValue(i);//我们强行赋值;
System.out.println(i);
}
//申明一个没有返回值的【值调用】静态方法;
static int callByValue(int n)
{
n = n*3;
return n;
}
}

结果:返回30, 在该示例代码中,通过把修改以后的参数n的值返回,来为变量i赋值,强制修改按值传递参数的值,从而达到修正参数值的目的;

--------------------------------------------------------------------
对于引用型传值和数值型传递的对比:

class PassValue
{
public static void main(String[] args)
{
int i = 10;
callByValue(i);
System.out.println("值调用下i值:"+i);
System.out.println("-------------------------------------");


test person=new test(2);//初始化getmoney 为2;
System.out.println("先前的person的getmoney:"+person.getmoney);
callByReference(person);

System.out.println("使用callByReference(person)之后的person的getmoney:"+person.getmoney);
System.out.println("代入person后的方法使得person的值发生了改变!");


}
//申明一个没有返回值的【值调用】静态方法;
static void callByValue(int n)
{

n= n*3;
}

//申明调没有返回值的【调用引用】静态方法
static void callByReference(test i)
{
i.add(i.getmoney);
}
}

class test //构造一个 test 类,有一个getmoney的int属性,它的方法使原始赋值增为原来的3倍;
{ int getmoney;
public test(int n)
{
getmoney=n;
}
public void add(int a)
{
getmoney=a*3;
}

}

值调用下i值:10
先前的person的getmoney:2
使用callByReference(person)之后的person的getmoney:6
代入person后的方法使得person的值发生了改变!

--------------------------------------------------------------
上面的一段程序有点绕,其实简单的看就是int i = 10; callByValue(i);后i值没有变;而test person=new test(2);callByReference(person);后person的值变了;

给大家来个更简单的说明问题:

class PassValue
{
public static void main(String[] args)
{
int a = 10;
int[] b = {1,2,3};
test(a,b);
System.out.println(a);
System.out.println(b[0]);

}
static void test(int n,int[] t)
{
n = 0;
t[0] = 12345;
}

}

输出结果为:10 12345
同样都是传入参数,为什么变量a的值未改变,而b[0]的值发生了改变呢?
在参数传递时,一般存在两种参数传递的规则,在Java语言中也是这样,这两种方式依次是:

l 按值传递(by value)

按值传递指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。

说明:使用该方式传递的参数,参数原始的值不发生改变。

l 按址传递(by address)

按址传递指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以后,参数原始的值发生改变。

说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发生改变。

在Java语言中,对于那些数据类型是按值传递,那些数据类型是按址传递都作出了硬性规定,如下所示:

l 按值传递的数据类型:八种基本数据类型和String

l 按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口

文笔不好,大家凑合看看咯。
【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
### 关于 IntelliJ IDEA 的使用教程与常见问题 对于希望深入了解 IntelliJ IDEA 或者遇到使用过程中难题的用户来说,存在一份详尽的配置教程[^3]。这份文档不仅涵盖了从下载到初次启动 IDE 的每一个环节,还深入探讨了基本设置、项目构建以及如何通过安装额外工具来增强开发体验。 #### 安装过程指导 针对首次接触此集成开发环境的人士,在章节1中可以找到关于下载链接及具体安装步骤的信息;而在初次运行部分,则解释了一些初始设定选项的意义及其调整方法。 #### 功能模块详解 为了帮助使用者更好地掌握该软件的各项特性,后续各节分别介绍了界面布局定制化(2.1)、SDK关联方式(3.2),还有借助插件系统提高效率的方法——比如利用Maven Helper处理复杂的依赖关系管理等问题[^2]。 #### 故障排除指南 当面对诸如插件加载错误或者性能瓶颈之类的棘手状况时,第十二章提供了一系列针对性建议和技术支持资源列表,旨在协助开发者迅速定位并解决问题所在。 ```python # 示例:创建一个新的 Python 项目 import os def create_project(project_name): project_path = f"./{project_name}" try: os.makedirs(project_path) print(f"Project '{project_name}' created successfully at {os.path.abspath(project_path)}") except Exception as e: print(f"Failed to create project: {e}") create_project("my_intellij_project") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值