在Java中,所有的方法参数,都是"按值传递".
有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是
Java中基本类型将值作为参数,按值传递.对象将引用作为参数,按值传递.
所谓按值传递,就是传递的是一个副本.
现在来解释下Java方法传递引用时的情况.
比如说有一个引用 Body body = new Body(.....);
将body当作参数传递的时候,传递的不是body指向的对象,也不是body引用本身,而是body的一个副本,并且这个副本和body是一模一样. 这里的一模一样就是body和副本指向同一个对象.
那么当body的副本进入方法后,对这个副本的修改同样会影响body.
但是如果进入方法后将body的副本指向其它对象的时候,那么和body是一点关系都没有了.
下面来看看程序就明白了.
- public class TestParam {
- public static void main(String[] args) {
- Body var1 = new Body(1);
- Body var2 = var1;
- doSomething( var2 );
- System.out.println( var1.a );
- System.out.println(var2.a);
- System.out.print(var1 == var2);
- }
-
- public static void doSomething(Body body) {
- body.a = 2;
- }
- }
- class Body {
- public Body(int a) {
- this.a = a;
- }
- int a;
- }
输出的结果是:
2
2
true
这个结果不难理解.
再看一个
- public class TestParam {
- public static void main(String[] args) {
- Body var1 = new Body(1);
- Body var2 = var1;
- doSomething( var2 );
- System.out.println( var1.a );
- System.out.println(var2.a);
- System.out.print(var1 == var2);
- }
-
- public static void doSomething(Body body) {
- body = new Body(2);
- }
- }
- class Body {
- public Body(int a) {
- this.a = a;
- }
- int a;
- }
输出的结果是
1
1
true
两个程序就是在参数进入方法体之后的处理有所区别.
针对第二个程序,画一个草图.
本文出自 “Taming the JAVA” 博客,请务必保留此出处http://nileader.blog.51cto.com/1381108/303501
javascript 中数据类型的内存分配基本和java中的一样。
javascript 中的函数参数的传递也是按值传递的上述文章也适用。
写道
<script type='text/javascript'>
//<![CDATA[
var num1=4;//基本数据类型
var num2=num1;//拷备一份副本给num2(java中基本数据类型也是一样的)
num1=3;//num2不会受到影响
alert(num2);//结果是4
alert(num1);//结果是3
//]]>
</script>
分享到:
相关推荐
Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载...
Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载).....
可以通过传递字符串参数给File构造器来创建一个File对象,例如`new File("C:\\Users\\User\\Documents\\file.txt")`。路径可以是绝对路径,也可以是相对路径。 3. **绝对路径与相对路径**: - **绝对路径**:完整...
6. JSP页面之间传递参数的方法有:Request对象、Session对象、Application对象、Cookie等。 7. Filter接口:Filter接口是Java Servlet规范中的一部分,主要用来过滤请求和响应。Filter接口有以下几个方法:init()、...
### Java程序员面试试题详解 #### CORBA的理解与应用 CORBA,全称为Common Object Request Broker Architecture,即公共对象请求代理体系结构,是由Object Management Group(OMG)制定的一项标准。其核心目标在于...
一种优化方法是在Servlet中创建连接,然后传递给JSP页面,这有助于代码的管理和性能提升。DB2连接速度变慢或服务器崩溃可能与DB2实例和数据库参数配置不当有关,需要进一步调整。 DB2 UDB支持多种应用程序开发方式...
同时,也要更新 `BoundSql` 的参数映射,确保分页参数被正确传递。 4. **注册拦截器**:在 MyBatis 的配置文件 `mybatis-config.xml` 中,我们需要添加 `<plugins>` 标签来注册我们的拦截器。这样,每次 SQL 执行时...
委托是类型安全的函数指针,可以将方法作为参数传递,是实现事件处理的基础。 11. **.NET框架** C#是.NET框架的一部分,开发者可以利用.NET提供的丰富库和服务,如Windows Forms、WPF、ASP.NET等,快速构建各种...
它通过解析请求参数和路径信息,决定调用哪个Action方法,并且将结果传递给视图进行渲染。 **Action的单元测试** 为了确保Action的功能正确,WebWork提供了一套完善的单元测试支持。你可以使用JUnit或其他测试框架...
`<sql:query>`标签用于执行SQL查询,`<sql:update>`用于更新操作,`<sql:param>`则用于传递参数。 4. **Functions标签库**: 这个库包含了来自Commons Lang库的一些有用函数,可以增强JSP页面的表达能力,比如字符串...
ActionContext是WebWork中传递请求参数、session状态和其他上下文信息的关键对象。它封装了请求和响应对象,为Action提供了一种访问当前请求环境的统一方式。 **ServletActionContext** ServletActionContext是...
WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在J2EE平台上被广泛用于构建企业级Web应用。本教程旨在帮助开发者理解和掌握WebWork的核心概念和使用方法。 **WebWork 介绍** WebWork 是由Apache软件...
WebWork是一款基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中提供了强大的功能和灵活性。本教程旨在帮助开发者理解和掌握WebWork的核心概念和技术。 **一、WebWork介绍** WebWork是由Apache软件...