方法传值

laowai411 2011-05-23 10:50:11
public class TestString {
public static void main(String[] args) {
String a = new String("A");
String b = new String("B");
operate(a,b);
System.out.println("main-A:"+a);
System.out.println("main-B:"+b);
}

private static void operate(String a, String b){
a = a.concat(b);
b=a;
System.out.println("operate()-A:"+a);
System.out.println("operate()-B:"+b);
}

}
结果
operate()-A:AB
operate()-B:AB
main-A:A
main-B:B

===============================================================================
-------------------------------------------------------------------------------
===============================================================================

public class TestStringBufer {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a,b);
System.out.println("main-A:"+a);
System.out.println("main-B:"+b);
}

private static void operate(StringBuffer a, StringBuffer b){
a = a.append(b);
b=a;
System.out.println("operate()-A:"+a);
System.out.println("operate()-B:"+b);
}

}

结果:
operate()-A:AB
operate()-B:AB
main-A:AB
main-B:B
----------------------------------------------------------------------------------------------------
为什么在oprate()方法里所得到的b的值是AB,而main()方法里b始终都是B呢?
还有就是为什么用String和StringBuffer在最后得到的a的值不一样呢?
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
无辜的程序员 2011-05-23
  • 打赏
  • 举报
回复
1、String是immutable的,改变String只有改变String对象的引用。但是在函数传值的时候,是不会改变对象的引用的,只能改对象引用的那个值。所以第一个里面的两个String在函数调用后,都不会改变;
2、同上面的解释,a = a.append(b); 中,a的引用没有变,只是对象内部发生变化了。但是b=a; 就改变b的引用了,在函数返回后,是无效的,也就是对b没有进行什么操作。
夕甜 2011-05-23
  • 打赏
  • 举报
回复
因为String处传值的效率没有StringBuffer高 append是追加 包含最后一位数 而String的concat是链接不包含
kai27ks 2011-05-23
  • 打赏
  • 举报
回复
建议你去学习下基础。。JAVA是传值。String和StringBuffer有区别。这些百度下就可以了
内容概要:本文档围绕基于MATLAB/Simulink平台的直流无刷电机速度控制系统展开,重点介绍利用Simulink搭建电机控制模型,实现直流无刷电机的速度开环控制仿真。文档详细阐述了系统建模、关键模块设计与参数配置过程,帮助读者深入理解电机控制的基本原理与仿真流程。同时,文档还列举了涵盖电力电子、新能源系统、路径规划、智能优化算法等多个领域的丰富仿真案例,充分展示了MATLAB/Simulink在多学科交叉科研仿真中的强大功能与广泛应用前景。; 适合人群:具备一定自动控制理论基础和MATLAB/Simulink使用经验的高校学生、科研人员及工程技术人员,特别适用于从事电机控制、电力电子、新能源系统、智能优化等方向的研究者。; 使用场景及目标:①学习直流无刷电机的工作原理及其速度开环控制方法;②掌握使用Simulink进行电机控制系统建模与仿真的核心技能;③为后续开展更高级的闭环控制、矢量控制或结合智能优化算法的电机控制研究奠定坚实的技术基础并提供实用的参考实例。; 阅读建议:建议读者结合文档提供的仿真模型与代码资源,亲自动手实践Simulink建模全过程,逐步理解各功能模块的作用与参数整定方法,并充分利用网盘中的配套资料进行复现与深入学习,从而有效提升科研仿真与工程实践能力。
内容概要:本文系统阐述了基于二维离散时间卡尔曼滤波器在二维平面内对运动目标进行轨迹跟踪的技术方案,重点分析了过程噪声与测量噪声在不同强度下对滤波性能的影响。通过建立目标状态空间模型,设计完整的预测与更新算法流程,实现了对受噪声干扰的观测数据进行有效估计与轨迹平滑,充分展现了卡尔曼滤波在动态系统状态估计中的鲁棒性与实用性,并提供了完整的Matlab代码实现,便于理论验证与参数调试。; 适合人群:具备信号处理、控制理论或状态估计基础知识的研究生、科研人员,以及从事雷达系统、导航定位、机器人感知、自动驾驶等领域的工程技术人员。; 使用场景及目标:① 掌握卡尔曼滤波的核心原理及其在目标跟踪中的建模与实现方法;② 分析不同噪声协方差参数对滤波收敛性、估计精度和平滑效果的影响;③ 为深入研究非线性滤波算法(如EKF、UKF)或多传感器融合技术奠定理论与实践基础。; 阅读建议:建议读者结合所提供的Matlab代码进行仿真实验,通过调整过程噪声和观测噪声的强度,观察滤波轨迹与真实轨迹的偏差变化,深入理解协方差矩阵的演化机制,并尝试将该方法拓展至三维空间或多目标跟踪场景,以增强实际应用能力。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧