-
请教一下,这个变量到底是怎么控制的5
现在有这样一段代码:import java.util.ArrayList; import java.util.List; public class RefTest { public String testString(String str){ str = "1111"; return str; } public void testList1(List<String> strs){ List<String> newStrs = new ArrayList<String>(); newStrs.add("11"); newStrs.add("22"); strs = newStrs; } public void testList2(List<String> strs){ strs.clear(); strs.add("11"); strs.add("22"); } }
接下来,有一段代码会调用其中的方法。import java.util.ArrayList; import java.util.List; public class Client { /** * @param args */ public static void main(String[] args) { String string = "Hello"; RefTest ref = new RefTest(); String string1 = ref.testString(string); System.out.println("String :"+string); System.out.println("String1 :"+string1); List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); ref.testList1(list); System.out.println("list1 result:"); for (String str : list) { System.out.println(str); } ref.testList2(list); for (String str : list) { System.out.println(str); } } }
而这短代码的运行结果是:
Hello
1111
a
b
11
22
对于第一个方法调用来说,我们可以认为Hello是一个全局变量,把它传到一个局部的方法里时,是不会改变它的值,那么后面两段代码的结果就让人费解了。这个据说个JVM里perm引用有关,可是,我是个java初学者,实在是搞不懂。希望大家不吝赐教!2012年8月02日 14:48
1个答案 按时间排序 按投票排序
-
采纳的答案
呃,形参吧。
你肯定搞错了。
难道你上手就是学的java?
c 语言没有学过?
形参,java也不是直接传引用的,而是传值的。
另外java中没有指针概念,只有引用概念。
对于
String string = "Hello";
RefTest ref = new RefTest();
String string1 = ref.testString(string);
string作为一个引用,值并未变过。
对于,
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b"); // list 对象是一个引用
ref.testList1(list); // 传入的是list 对象的一个copy,所以list对象没有变化
System.out.println("list1 result:");
for (String str : list) {
System.out.println(str);
}2012年8月03日 05:53
相关推荐
Java是强类型语言,这意味着每个变量必须先声明其类型,然后才能使用。 初始化是给变量赋值的过程。声明和初始化可以同时进行,如`int num = 10;`。不初始化的变量将含有默认值,例如,对于整型变量,默认值是0,...
这类伪指令用于在汇编过程中定义变量或结构体。 - **.asg** [“]字符串[”],替换符号 - 作用:用一字符串作为替换符号。 - 说明:用于定义字符串变量。 - **.endstruct** - 作用:结束结构定义。 - 说明:用于...
模型“能跑”意味着MATLAB/Simulink环境可以成功运行这个模型,但“控制策略失效,不起作用”则表明在实际仿真过程中,电机的转矩和磁链控制并未按照预期工作。 "usvector nishizhen.m"可能包含了电机的磁场定向...
在这个场景中,用户下载了一个关于PB打印功能的源码,但对如何理解和使用它感到困惑,因此在寻求指导。 在PowerBuilder中,打印功能通常涉及以下知识点: 1. **PowerScript**:PowerBuilder的脚本语言,用于编写...
5. 控制流:Java的控制结构包括条件语句(if-else)、循环(for、while、do-while)和选择结构(switch)。熟练掌握这些语句,能帮助编写逻辑复杂的程序。 6. 接口:接口提供了多继承的解决方案,其中定义的方法...
- (5) “这个实验既简单,现象又明显”属于交流评价环节。 - (6) 正确的先后顺序为 (1)、(3)、(4)、(2)、(5)。 以上内容详细阐述了化学实验中的科学探究方法、控制变量法的应用、实验异常处理原则以及呼吸气体...
这个程序展示了C++中的基本循环控制和逻辑结构,是学习C++编程的一个很好的起点。对于初一的学生来说,理解并能编写这样的代码是一个很好的成就,同时也是一个挑战,有助于提升逻辑思维能力。如果遇到任何问题,可以...
WinCC 水塔水位监控系统的重要控制方式包括:设计监控界面、定义数据变量、动画连接、 WinCC 与 S7300PLC 通讯连接等。这些控制方式旨在实现水塔水位自控控制、远程监控、实现无人值守。 知识点四:系统实现手段 ...
在这个项目中,开发者分享了源代码并提出了一个优化问题,即如何减少游戏的内存需求。 源码分析: 1. **数据结构与算法优化**:游戏中的敌人资源存储在`a.json`文件中,这可能是一个JSON格式的文件,用于描述敌人...
在《Java语言程序设计》第十版的第二章中,我们主要探讨了Java编程的基础概念和语法,包括变量、数据类型、运算符、控制结构以及方法的使用。这一章的学习对于初学者来说至关重要,因为它奠定了后续深入学习Java的...
- Stack Overflow、GitHub等社区是学习Java的好去处,可以在这里找到问题的答案,也可以向其他开发者请教。 #### 四、总结 Java作为一门历史悠久且功能强大的编程语言,在软件开发领域占据着重要的地位。无论是...
例如,一个简单的C程序可能包括读取用户输入的两个整数并计算它们的和,这个过程涉及到变量声明、用户输入处理、算术运算和屏幕输出,对于初学者来说是一个很好的实践机会。 ### SHELL编程与后台批处理 SHELL脚本...
1. **控制模式**:采用一主一从的控制模式,即一个主站控制一台从站,主站负责整体操作,从站执行具体任务。这种模式有助于实现分布式控制,提高系统的稳定性和可靠性。 2. **控制逻辑**:启动时,主站启动按钮触发...
"炸弹.vbe"是这个压缩包中的文件名,VBE是Visual Basic Script Edition的扩展名,是一种基于VBScript的脚本文件。这意味着这个小程序可能是用VBScript编写的,VBScript常用于Windows系统的批处理脚本和网页脚本。VBE...
1. `demo`: 这是一个用于展示MATLAB功能的命令,通过运行`demo`,用户可以浏览和运行各种示例程序,了解MATLAB的不同应用领域。 2. `who`: 用于显示当前工作空间中的所有变量名称。 3. `whos`: 提供更详细的信息,...
- **练习基础语法**:熟练掌握变量、数据类型、控制结构等基础语法,这是构建更复杂程序的基础。 - **解决实际问题**:尝试用C语言解决实际问题,如编写计算器、文本处理程序等,这不仅能够巩固所学知识,还能提升...
这个资源对于那些正在学习Python编程语言的初学者来说是非常宝贵的,它提供了一系列的实践题目,帮助巩固理论知识并提升实际编程技能。 在Python的学习过程中,实践是至关重要的一步。通过解决课后习题,学习者可以...
- 变量与数据类型:计算圆面积需要用到半径(radius)这个变量,通常我们定义为double类型,以存储浮点数值。 - 运算符:项目中会用到乘法运算符(*)来计算圆的面积。 - 控制结构:可能包含if语句,用于验证输入...
5. 数组和指针:这两个概念极其灵活,需要深入理解和应用,特别是字符串和数组指针的交互。 总的来说,学习C语言需要耐心和毅力,不断地实践和总结,形成良好的编程习惯。通过针对性的复习和大量的上机练习,能够...
1. **变量与数据类型**:JavaScript是弱类型语言,这意味着变量可以存储不同类型的数据,如字符串、数字、布尔值等。了解`var`、`let`和`const`关键字的差异以及它们在作用域上的应用至关重要。 2. **操作符与...